Ubuntu'da SSH Etkinleştirme: OpenSSH Kurulumu ve Sıkılaştırma
- 6 Ekim 2026
- 09:00
- Yazar: Adrien Roche
- Ağ

Ubuntu'da SSH'ı etkinleştirin: kurun, başlatın, güvenlik duvarını açın
Ubuntu'da SSH openssh-server paketinden gelir. Ubuntu Server kurulum sırasında bunu yüklemeyi önerir ve neredeyse her bulut veya VPS imajı zaten dinleyen bir sshd ile gelir; Ubuntu Desktop ise onu hiç kurmaz.
1. openssh-server paketini kurun
sudo apt update
sudo apt install -y openssh-serverPaket zaten kuruluysa apt bunu bildirir ve hiçbir şeyi değiştirmez. Kurulum ayrıca 3. adımda kullanılan OpenSSH adlı bir UFW uygulama profili kaydeder.
2. Servisi etkinleştirin ve başlatın
sudo systemctl enable --now ssh
systemctl status sshUbuntu'da birimin adı ssh'tır; sshd bir takma addır. enable --now arka plan servisini hem şimdi hem de her açılışta başlatır. Ubuntu 22.10'dan bu yana sshd soket ile etkinleştirilir: portu 22 ssh.socket sahiplenir ve ilk gelen bağlantıda ssh.service başlatılır; bu yüzden kurulumun hemen ardından TriggeredBy: ssh.socket ile birlikte görülen inactive (dead) durumu normaldir, port açıktır. Genel görünüm için systemctl ile servisleri listeleme yazısına bakın.
3. UFW üzerinden SSH'a izin verin
Ubuntu UFW'yi devre dışı olarak gönderir. Etkinleştirecekseniz önce SSH'a izin verin; kural yokken güvenlik duvarını açmak, uzak bir makinede kendinizi dışarıda bırakmanın klasik yoludur.
sudo ufw allow OpenSSH
sudo ufw enable
sudo ufw statusufw allow OpenSSH uygulama profilini kullanır ve 22/tcp portunu açar. Daha sonra sshd'yi taşırsanız yeni porta sudo ufw allow 2222/tcp ile izin verin ve eski kuralı silin. Sunucunun adresini hostname -I ile bulun.
Windows, macOS veya Linux'tan bağlanın
Güncel tüm masaüstü işletim sistemlerinde yerleşik bir OpenSSH istemcisi vardır ve söz dizimi her yerde aynıdır:
ssh username@SERVER_IP
ssh -p 2222 username@SERVER_IP # non-default port- Windows 10 ve 11: PowerShell veya Windows Terminal açıp komutu yazın; OpenSSH istemcisi 2018'den (sürüm 1809) beri Windows ile birlikte gelir.
sshtanınmıyorsa Ayarlar > Uygulamalar > İsteğe bağlı özellikler altından ekleyin. - macOS: Terminal, aynı komut.
- Linux: herhangi bir terminal;
openssh-clientUbuntu'da varsayılan olarak kuruludur.
İlk bağlantıda sunucunun host anahtarı parmak izini yes yazarak kabul edin; bu bilgi ~/.ssh/known_hosts dosyasında saklanır ve değişirse uyarılırsınız. Ardından hesap parolasını girin. Sonraki bölüm onun yerine bir anahtar koyuyor.
Anahtar tabanlı kimlik doğrulamaya geçin
Botnetlerin gece gündüz kaba kuvvetle denediği şey parola girişleridir; anahtarlar bu denemeleri anlamsız kılar. Kendi bilgisayarınızda, asla sunucuda değil, bir Ed25519 anahtar çifti üretin:
ssh-keygen -t ed25519 -C "laptop-2026"Varsayılan yolu (~/.ssh/id_ed25519) kabul edin ve bir parola cümlesi belirleyin; bu, özel anahtarı diskte şifreler ve bir SSH agent sayesinde oturum başına yalnızca bir kez yazarsınız. Makinenizden yalnızca .pub dosyası çıkar.
Genel anahtarı sunucuya kopyalayın
macOS ve Linux'ta ssh-copy-id bunu tek adımda, parolanızı son bir kez kullanarak yapar:
ssh-copy-id -i ~/.ssh/id_ed25519.pub username@SERVER_IPOpenSSH'ın Windows sürümü ssh-copy-id içermez; anahtarı PowerShell'den boru ile gönderin:
type $env:USERPROFILE\.ssh\id_ed25519.pub | ssh username@SERVER_IP "mkdir -p ~/.ssh && chmod 700 ~/.ssh && cat >> ~/.ssh/authorized_keys && chmod 600 ~/.ssh/authorized_keys"Her iki yöntem de anahtarı ilgili kullanıcının ~/.ssh/authorized_keys dosyasına ekler. İzinler önemlidir: ~/.ssh dizini 700 modunda değilse veya authorized_keys sahibinden başkası tarafından yazılabiliyorsa sshd dosyayı sessizce yok sayar. Yeni bir terminalde ssh username@SERVER_IP artık hesap parolası olmadan giriş yapmalıdır. Bu çalışmadan sonraki bölüme geçmeyin.
sshd_config sıkılaştırma: parola yok, root yok, izin listesindeki kullanıcılar
Düzenleme yaparken mevcut oturumunuzu açık tutun; yeni yapılandırma bir şeyi bozarsa geri dönüş yolunuz odur. /etc/ssh/sshd_config dosyası Include /etc/ssh/sshd_config.d/*.conf ile başlar ve sshd her anahtar sözcük için okuduğu ilk değeri korur; yani bir drop-in, ana dosyada daha aşağıda yer alan her şeyi geçersiz kılar. Ayrıca bulut imajları çoğu zaman PasswordAuthentication yes içeren bir /etc/ssh/sshd_config.d/50-cloud-init.conf dosyasıyla gelir; ana dosyayı düzenlemenin sık sık hiçbir işe yaramamış gibi görünmesinin nedeni budur. Çözüm, adı sıralamada önce gelen bir drop-in dosyasıdır:
sudo nano /etc/ssh/sshd_config.d/00-hardening.confAşağıdakini yapıştırın ve username yerine kendi kullanıcı adınızı yazın:
PasswordAuthentication no
KbdInteractiveAuthentication no
PubkeyAuthentication yes
PermitRootLogin no
AllowUsers username
MaxAuthTries 3
LoginGraceTime 30
X11Forwarding no
ClientAliveInterval 300
ClientAliveCountMax 2PermitRootLogin no, sudo yetkisi olan yetkisiz bir hesabınız olduğunu varsayar. Şimdiye kadar root olarak çalıştıysanız, dosyayı uygulamadan önce Linux'ta sudo kullanıcısı oluşturun ve anahtarınızı ona kopyalayın. Ardından söz dizimini doğrulayın, yeniden yükleyin ve tüm include'lar birleştirildikten sonra sshd'nin gerçekte kullandığı değerleri kontrol edin. sshd -T tam olarak bunu yazdırır:
sudo sshd -t
sudo systemctl reload ssh
sudo sshd -T | grep -Ei 'passwordauthentication|permitrootlogin|allowusers|port'İlkini kapatmadan önce ikinci bir terminal açıp anahtarınızla giriş yapın. Her yönergenin işlevi:
| Yönerge | Değer | Etki |
|---|---|---|
PasswordAuthentication | no | Yalnızca anahtar; parola kaba kuvveti yavaş değil, imkânsız hale gelir. |
KbdInteractiveAuthentication | no | PAM'in parolalar için kullanabileceği soru-cevap yolunu kapatır (eskiden ChallengeResponseAuthentication). |
PermitRootLogin | no | Root, anahtarla olsun olmasın SSH üzerinden giriş yapamaz; sudo kullanın. |
AllowUsers | kullanıcı adlarınız | Listede olmayan kullanıcılar kimlik doğrulamadan önce reddedilir; [email protected]/24 bir kullanıcıyı bir ağa sabitler. |
MaxAuthTries | 3 | Bağlantı başına üç başarısız deneme, sonra bağlantı kesilir. |
LoginGraceTime | 30 | Kimliği doğrulanmamış bağlantılar 30 saniye sonra kesilir. |
ClientAliveInterval / ClientAliveCountMax | 300 / 2 | Sessiz bir istemciyi beş dakikada bir yoklar ve yanıtsız iki yoklamadan sonra bağlantıyı düşürür; canlı istemciler otomatik yanıt verir. |
X11Forwarding | no | Grafik uygulamaları yönlendirmiyorsanız kapalı. |
Keepalive'ın bir de istemci tarafı vardır: kendi makinenizdeki ~/.ssh/config dosyasına eklenen ServerAliveInterval 60, NAT yönlendiricilerinin boşta kalan oturumları düşürmesini engeller.
SSH portunu değiştirmek güvenlik değildir
sshd'yi 22 portundan taşımak yaygın bir tavsiyedir. Kazandırdığı şey daha az log satırıdır. Toplu tarayıcılar 65.535 portun tamamını tarar ve sshd'yi 2222'de saatler içinde bulur; sizi hedefleyen biri nmap ile saniyeler içinde bulur. Güvenliği anahtarlar, root girişinin kapalı olması, bir izin listesi ve fail2ban sağlar; port kozmetiktir. Yine de yoğun bir sunucuda kimlik doğrulama logunu okunabilir tutarak işe yarar, ama asla bir savunma katmanı saymayın.
Değiştirecekseniz şu sırayı koruyun: yeni portu UFW'de açın, portu değiştirin, yeniden başlatın, ikinci bir terminalden test edin, sonra eski kuralı kaldırın. /etc/ssh/sshd_config dosyasındaki #Port 22 satırının yorumunu kaldırın, yeni portu yazın ve ardından:
sudo ufw allow 2222/tcp
sudo sshd -t
sudo systemctl daemon-reload
sudo systemctl restart ssh.socket # Ubuntu 22.10 and later
sudo systemctl restart ssh # Ubuntu 22.04 and earlierSoket ile etkinleştirilen sürümlerde hangi portun bağlanacağına sshd değil soket birimi karar verir; Ubuntu, daemon-reload sırasında sshd yapılandırmasından Port değerini okuyup ssh.socket birimini güncelleyen bir systemd üreteci ile gelir. sudo ss -tlnp | grep sshd ile doğrulayın. Çıktıyı Linux'ta açık portları kontrol etme rehberi açıklıyor. sshd inatla hâlâ 22'deyse soket etkinleştirmesini kapatın ve portu servisin kendisi bağlasın: sudo systemctl disable --now ssh.socket && sudo systemctl enable --now ssh.service. Yeni bir terminalde ssh -p 2222 çalıştığında sudo ufw delete allow OpenSSH komutunu çalıştırın.
fail2ban ekleyin ve iki faktörlü kimlik doğrulamayı düşünün
Parolalar kapalıyken kaba kuvvet başarılı olamaz, ama her deneme yine de bir fork ve bir log satırına mal olur. fail2ban kimlik doğrulama logunu izler ve tekrar tekrar başarısız olan adresleri yasaklar:
sudo apt install -y fail2ban
sudo nano /etc/fail2ban/jail.localDosyaya şunu koyun:
[sshd]
enabled = true
port = ssh
backend = systemd
maxretry = 5
findtime = 10m
bantime = 1hsudo systemctl enable --now fail2ban
sudo fail2ban-client status sshdjail.conf dosyasını asla düzenlemeyin; yükseltmelerde değiştirilir ve jail.local onu geçersiz kılar. port = ssh değeri /etc/services üzerinden çözülür, bu nedenle arka plan servisini taşıdıysanız port = 2222 yazın. backend = systemd journal'ı doğrudan okur ve imajınız /var/log/auth.log yazsa da yazmasa da çalışır. fail2ban-client status sshd yasaklı adresleri listeler; sudo fail2ban-client set sshd unbanip 203.0.113.7 birini serbest bırakır. Varsayılan olarak fail2ban'ın kuralları UFW'ninkilerden önce değerlendirilir, dolayısıyla ikisi bir arada çalışır.
İki faktörlü kimlik doğrulama
Anahtar artı parola cümlesinin yetmediği durumlarda libpam-google-authenticator anahtarın üstüne zaman tabanlı bir kod ekler: paketi kurun, giriş yapan kullanıcı olarak google-authenticator komutunu çalıştırın, /etc/pam.d/sshd dosyasına auth required pam_google_authenticator.so satırını ekleyin (ve oradaki @include common-auth satırını yoruma alın), ardından sshd'de KbdInteractiveAuthentication yes ve AuthenticationMethods publickey,keyboard-interactive ayarlayın. Çalınan bir dizüstü bilgisayara karşı gerçek bir kazanç ve kaybedilecek bir şey daha: yedek kodları sunucuda tutmayın.
Sorun giderme: connection refused, timed out, permission denied
Connection refused
Sunucu yanıt verdi ama o portta hiçbir şey dinlemiyor: sshd durdurulmuş, başka bir yere bağlanmış ya da yanlış port yazmışsınızdır. Sağlayıcının konsolundan systemctl status ssh ve sudo ss -tlnp | grep ssh komutlarını çalıştırın. Bir söz dizimi hatası sshd'nin hiç başlamamasına yol açar; sudo sshd -t hatalı satırı yazdırır ve journalctl -u ssh -n 50 son başlatmayı gösterir.
Connection timed out
Paketler reddedilmiyor, düşürülüyor; bu neredeyse her zaman bir güvenlik duvarı demektir: izin kuralı olmayan UFW (sudo ufw status verbose), sağlayıcı panelindeki bir güvenlik grubu ya da giden 22 portunu engelleyen kendi ağınız. Telefon hotspot'u bunu eler. ssh -v username@SERVER_IP el sıkışmanın nerede takıldığını gösterir.
Permission denied (publickey)
Sunucuya erişiliyor ama sizi reddediyor. Sırayla kontrol edin: kullanıcı adı, o kullanıcının authorized_keys dosyasının sunduğunuz anahtarı içerip içermediği (ssh -i ~/.ssh/id_ed25519 -v belirli bir anahtarı zorlar), ~/.ssh izinleri ve kullanıcı adının AllowUsers listesinde eksik olup olmadığı. Sunucuda journalctl -u ssh -n 30 nedeni söyler; Authentication refused: bad ownership or modes yukarıda anlatılan izin sorunudur.
Host anahtarı uyarısı
Bir yeniden kurulumun ardından görülen WARNING: REMOTE HOST IDENTIFICATION HAS CHANGED beklenen bir durumdur: ssh-keygen -R SERVER_IP komutunu çalıştırıp yeniden bağlanın. Hiçbir şey yeniden kurmadıysanız, herhangi bir yere parola yazmadan önce nedenini öğrenin. Tamamen dışarıda mı kaldınız? Geri dönüş yolu sağlayıcının konsoludur.
Yukarıdakilerin tamamı, root yetkisine sahip olduğunuz ve sshd'yi bozup bir konsoldan onarmayı göze alabileceğiniz bir makineyi varsayar. rdp.monster'dan bir Linux VPS tam olarak böyle bir makinedir: tam root erişimi, ayrılmış CPU ve RAM, sınırsız (adil kullanım) bant genişliği, KYC yok, kripto veya fiat ile ödeme, aylık $8.99'dan başlayan fiyatlar ve sunucu ödeme onaylandıktan yaklaşık 10 saniye sonra çevrimiçi. Bu, ilk tarayıcı 22 portunu bulmadan anahtarlarınızı yerleştirmek için fazlasıyla yeterli.
Sık sorulan sorular
Ubuntu varsayılan olarak SSH etkin mi gelir?
sudo apt install openssh-server komutunu çalıştırana kadar 22 portunda hiçbir şey dinlemez. Ubuntu Server kurulum sırasında OpenSSH sunucusunun kurulup kurulmayacağını sorar ve aynı anda GitHub veya Launchpad anahtarlarınızı içe aktarabilir. Bulut ve VPS imajları neredeyse her zaman openssh-server kurulu, etkin ve bağlantı kabul eder halde gelir, çünkü sağlayıcının makineyi size teslim etmesinin tek yolu budur. systemctl status ssh ile kontrol edin.Ubuntu'da SSH'ın çalışıp çalışmadığını nasıl kontrol ederim?
systemctl status ssh servisin etkin veya açılışta başlatılıyor olup olmadığını söyler. Ubuntu 22.10 ve sonrası soket etkinleştirmesi kullandığından, kimse bağlı değilken servis haklı olarak TriggeredBy: ssh.socket ile birlikte inactive (dead) görünebilir; bu yüzden daha güvenilir test sudo ss -tlnp | grep ssh komutudur: 0.0.0.0:22 veya [::]:22 gösteren bir satır SSH'ın dinlediği anlamına gelir. Başka bir makineden ssh -v username@SERVER_IP bunu uçtan uca doğrular.SSH'ı 22 portunda bırakmak güvenli mi?
PasswordAuthentication no ayarına ve bir anahtar çiftine sahip bir sunucuda başarılı olamaz; fail2ban da gürültünün çoğunu temizler. sshd'yi 2222 veya 22222'ye taşımak onu yalnızca en tembel tarayıcılardan gizler; nmap ve masscan gibi port tarayıcıları dakikalar içinde bulur ve internet çapındaki dizinler onu zaten listeler. Varsayılan olmayan bir portu bir güvenlik denetimi değil, log hijyeni önlemi olarak görün ve portu değiştirdiniz diye asla anahtarları atlamayın.Ubuntu'da ssh ile sshd arasındaki fark nedir?
ssh bağlantı açmak için dizüstü bilgisayarınızda çalıştırdığınız istemcidir; openssh-client paketinden gelir. sshd ise sunucuda yanıt veren arka plan servisidir, openssh-server paketinden gelir ve /etc/ssh/sshd_config dosyasında yapılandırılır (istemci ssh_config dosyasını okur). Ubuntu ve Debian systemd birimini ssh.service olarak adlandırır ve sshd.service adını takma ad olarak tanımlar; bu yüzden systemctl restart ssh ile systemctl restart sshd aynı işi yapar. Fedora, RHEL ve Arch'ta ise birimin adı yalnızca sshd'dir.Adrien Roche, Altyapı ve Hosting Editörü
Windows Server ve Linux filolarını 10+ yıldır işleten sistem mühendisi. Adrien, rdp.monster altyapı dokümantasyonunu yönetir ve RDP, VPS hosting, sunucu yönetimi, ağ ve gizlilik araçları üzerine rehberlerimizi yazar.
İlgili yazılar




