SSH (Secure Shell), bir bilgisayardan başka bir bilgisayara güvenli, şifreli bir bağlantı kurmanızı sağlayan ağ protokolüdür. Sistem yöneticilerinin, geliştiricilerin ve sunucu sahiplerinin uzaktaki makineleri yönetmek için kullandığı en temel araçtır. Bu rehberde SSH'ı sıfırdan, adım adım ve güvenli kurulumla birlikte öğreneceksiniz.
SSH Nedir?
SSH, güvenli olmayan bir ağ (örneğin internet) üzerinden iki cihaz arasında şifreli bir kanal açar. 1995'te, verileri açık metin olarak gönderen Telnet ve rlogin gibi güvensiz protokollerin yerini almak için geliştirildi. Bugün uzak sunucu yönetiminin fiili standardıdır.
SSH bir istemci–sunucu mimarisi kullanır: sizin bilgisayarınızdaki SSH istemcisi, uzaktaki makinede çalışan SSH sunucusuna (genellikle sshd servisi) bağlanır. Bağlantı kurulduğunda aradaki tüm trafik şifrelenir; biri ağı dinlese bile yalnızca anlamsız şifreli veri görür.
SSH'ın sağladıkları:
- Şifreli uzak terminal erişimi — uzak sunucuda komut satırı açarsınız.
- Güvenli dosya transferi — SCP, SFTP ve rsync ile dosya alıp gönderirsiniz.
- Port yönlendirme (tünelleme) — başka servisleri SSH üzerinden güvenle taşırsınız.
- Anahtar tabanlı kimlik doğrulama — şifre yerine kriptografik anahtarla giriş.
SSH varsayılan olarak 22 numaralı TCP portunu kullanır.
SSH Nasıl Çalışır?
Bir SSH oturumu üç aşamada kurulur:
- Anahtar değişimi: İstemci ve sunucu, oturuma özel bir simetrik şifreleme anahtarı üzerinde güvenli şekilde anlaşır (Diffie-Hellman). Bu anahtar yalnızca o oturum boyunca geçerlidir.
- Sunucu doğrulama: Sunucu, kendine ait host anahtarıyla kimliğini kanıtlar. Böylece doğru makineye bağlandığınızdan emin olursunuz (man-in-the-middle saldırısına karşı koruma).
- Kullanıcı doğrulama: Siz şifreyle veya — tercih edilen yöntem — özel anahtarınızla kimliğinizi kanıtlarsınız.
Anahtar tabanlı yöntemde bir anahtar çifti kullanılır: public (açık) anahtar sunucuya yüklenir ve paylaşılabilir; private (özel) anahtar yalnızca sizde kalır ve asla paylaşılmaz. Sunucu açık anahtarla bir meydan okuma şifreler; yalnızca sizin özel anahtarınız bunu çözebildiği için kimliğiniz kanıtlanır.
SSH ile Bağlanma
Temel bağlantı komutu son derece basittir; kullanıcı adı ve sunucu adresini verirsiniz:
ssh kullanici@sunucu_ip
Örnekler:
ssh [email protected]
ssh [email protected]
Sunucu standart dışı bir port kullanıyorsa -p bayrağıyla belirtin:
ssh -p 2222 kullanici@sunucu_ip
İlk Bağlantı ve Host Doğrulama
Bir sunucuya ilk kez bağlandığınızda SSH, o sunucunun parmak izini tanımadığı için sizden onay ister. Terminalde şuna benzer bir uyarı görürsünüz:
The authenticity of host 'sunucu.com (203.0.113.10)' can't be established.
ED25519 key fingerprint is SHA256:Vci3l0...n8Qa4.
Are you sure you want to continue connecting (yes/no/[fingerprint])?
Sunucunun gerçekten beklediğiniz makine olduğundan eminseniz yes yazıp Enter'a basın. Bu parmak izi ~/.ssh/known_hosts dosyasına kaydedilir; bir daha sorulmaz. Eğer ileride aynı sunucu için parmak izi değişti uyarısı alırsanız dikkatli olun — bu, sunucunun yeniden kurulduğu anlamına gelebileceği gibi bir saldırı işareti de olabilir.
SSH Anahtarı ile Kimlik Doğrulama
Şifre yerine anahtar kullanmak hem daha güvenli hem daha pratiktir: brute-force saldırılarına kapalıdır ve her bağlantıda şifre yazmazsınız. 2025 itibarıyla önerilen algoritma Ed25519'dur; hızlı, kısa ve güçlüdür.
Anahtar Çifti Oluşturma
ssh-keygen -t ed25519 -C "[email protected]"
Komut çalıştığında nereye kaydedileceği ve isteğe bağlı bir parola (passphrase) sorulur:
Generating public/private ed25519 key pair.
Enter file in which to save the key (/home/kullanici/.ssh/id_ed25519): <Enter>
Enter passphrase (empty for no passphrase): ********
Enter same passphrase again: ********
Your identification has been saved in /home/kullanici/.ssh/id_ed25519
Your public key has been saved in /home/kullanici/.ssh/id_ed25519.pub
Passphrase, özel anahtarınızı şifreler; anahtar dosyanız çalınsa bile parola olmadan kullanılamaz. Eski sistemlerle uyum için RSA gerekiyorsa en az 4096 bit kullanın:
ssh-keygen -t rsa -b 4096 -C "[email protected]"
Açık Anahtarı Sunucuya Yükleme
En kolay yol ssh-copy-id komutudur; açık anahtarınızı sunucudaki ~/.ssh/authorized_keys dosyasına ekler:
ssh-copy-id kullanici@sunucu_ip
ssh-copy-id yoksa aynı işi elle yapabilirsiniz:
cat ~/.ssh/id_ed25519.pub | ssh kullanici@sunucu_ip "mkdir -p ~/.ssh && cat >> ~/.ssh/authorized_keys"
Artık ssh kullanici@sunucu_ip dediğinizde şifre sorulmadan (yalnızca varsa passphrase ile) bağlanırsınız.
Doğru Dosya İzinleri
SSH, izinleri fazla açık olan anahtar dosyalarını güvenlik gereği reddeder. İzinleri şöyle ayarlayın:
chmod 700 ~/.ssh
chmod 600 ~/.ssh/authorized_keys
chmod 600 ~/.ssh/id_ed25519
chmod 644 ~/.ssh/id_ed25519.pub
SSH Yapılandırması
İstemci Yapılandırması (~/.ssh/config)
Sık bağlandığınız sunucular için ~/.ssh/config dosyası bağlantıları kısaltır. Her sunucu için bir Host bloğu tanımlarsınız:
Host sunucum
HostName 192.168.1.100
User admin
Port 22
IdentityFile ~/.ssh/id_ed25519
Host vps
HostName sunucu.com
User root
Port 2222
Artık uzun komut yerine yalnızca takma adı yazmanız yeterli:
ssh sunucum
Sunucu Yapılandırması (/etc/ssh/sshd_config)
Sunucu davranışı /etc/ssh/sshd_config dosyasından yönetilir. Güvenliği artıran tipik bir yapılandırma:
Port 2222 # Standart dışı port (otomatik taramaları azaltır)
PermitRootLogin no # Root ile doğrudan girişi kapat
PasswordAuthentication no # Şifreyle girişi kapat (sadece anahtar)
PubkeyAuthentication yes # Anahtar tabanlı girişi aç
AllowUsers admin deploy # Sadece belirli kullanıcılara izin ver
Değişiklikten sonra servisi yeniden başlatın:
sudo systemctl restart sshd
Önemli: Şifre girişini kapatmadan önce anahtarla bağlanabildiğinizi aynı anda açık ikinci bir oturumda test edin. Aksi halde kendinizi sunucudan kilitleyebilirsiniz.
Güvenlik Önlemleri
Açık internete bakan bir SSH sunucusu sürekli otomatik saldırı altındadır. Aşağıdaki önlemler riski büyük ölçüde azaltır:
- Root girişini kapatın (
PermitRootLogin no) ve günlük işleri normal bir kullanıcı +sudoile yapın. - Şifre girişini kapatın (
PasswordAuthentication no); yalnızca anahtar kullanın. - Portu değiştirin; bu güvenlik sağlamaz ama log gürültüsünü ve otomatik taramaları azaltır.
- Fail2Ban kurun; başarısız giriş denemelerini izleyip saldırgan IP'leri otomatik engeller.
Fail2Ban ile Brute-Force Koruması
sudo apt install fail2ban
sudo systemctl enable --now fail2ban
Fail2Ban, /etc/fail2ban/jail.local dosyasındaki kurallara göre belirli sayıda hatalı denemeden sonra IP'yi geçici olarak banlar.
SSH Tünelleme (Port Yönlendirme)
SSH yalnızca terminal değil, başka servisleri de şifreli kanaldan taşıyabilir.
Yerel Port Yönlendirme
Uzaktaki bir servisi kendi makinenizde bir porta bağlar (örneğin sunucudaki 80 portunu yerelde 8080'e):
ssh -L 8080:localhost:80 kullanici@sunucu
Uzak Port Yönlendirme
Kendi makinenizdeki bir servisi sunucu üzerinden erişilebilir kılar:
ssh -R 9090:localhost:3000 kullanici@sunucu
SOCKS Proxy (Dinamik Yönlendirme)
SSH'ı şifreli bir SOCKS proxy gibi kullanıp tarayıcı trafiğinizi sunucu üzerinden geçirebilirsiniz:
ssh -D 8888 kullanici@sunucu
Ardından tarayıcınızın SOCKS proxy ayarını localhost:8888 yapın.
Dosya Transferi
SCP (Secure Copy)
Tek seferlik, basit dosya kopyalama için idealdir:
# Sunucudan yerele indir
scp kullanici@sunucu:/uzak/dosya.txt /lokal/konum/
# Yerelden sunucuya yükle
scp /lokal/dosya.txt kullanici@sunucu:/uzak/konum/
# Dizini özyinelemeli kopyala
scp -r /lokal/dizin kullanici@sunucu:/uzak/konum/
SFTP (İnteraktif Transfer)
FTP'ye benzer etkileşimli bir oturum açar:
sftp kullanici@sunucu
Oturum içinde kullanabileceğiniz komutlar: ls/cd/pwd (gezinme), get dosya (indir), put dosya (yükle), mkdir (dizin oluştur).
rsync over SSH
Büyük veya tekrarlı transferler için en verimli yöntemdir; yalnızca değişen dosyaları aktarır:
rsync -avz -e ssh /lokal/dizin/ kullanici@sunucu:/uzak/dizin/
SSH Agent ve Anahtar Yönetimi
Passphrase'li bir anahtar kullanıyorsanız, her bağlantıda parola yazmamak için ssh-agent anahtarı bellekte tutar:
eval $(ssh-agent)
ssh-add ~/.ssh/id_ed25519
Farklı sunucular için ayrı anahtarlar oluşturabilir ve ~/.ssh/config içinde her Host için IdentityFile ile eşleyebilirsiniz. Bir anahtarı yenilemek istediğinizde yeni çift oluşturup açık anahtarı tekrar yükleyin, ardından eskisini authorized_keys dosyasından kaldırın.
Sorun Giderme
Bağlantı Reddedildi (Connection refused)
Genellikle SSH servisi çalışmıyordur veya yanlış port denenmektedir. Sunucuda servisi ve portu kontrol edin:
sudo systemctl status sshd
sudo ss -tlnp | grep ssh
İzin Reddedildi (Permission denied)
Çoğunlukla anahtar yüklenmemiştir, yanlış kullanıcı kullanılıyordur veya dosya izinleri yanlıştır. Yukarıdaki chmod adımlarını ve doğru kullanıcı adını kontrol edin.
Debug Modu
Sorunun nerede olduğunu görmek için ayrıntılı çıktı alın (daha fazla ayrıntı için -vvv):
ssh -vvv kullanici@sunucu
SSH Güvenlik Kontrol Listesi
- Anahtar tabanlı kimlik doğrulama açık, şifre girişi kapalı.
- Root ile doğrudan giriş kapalı.
- Özel anahtarlar passphrase ile korunuyor.
- Dosya izinleri doğru (
~/.ssh700, anahtarlar 600). - Fail2Ban veya benzeri bir brute-force koruması aktif.
known_hostsuyarılarını ciddiye alıyorsunuz.
Bu adımları uyguladığınızda SSH sunucunuz hem güvenli hem de günlük kullanımda pratik olur. Anahtar tabanlı kimlik doğrulama + sıkılaştırılmış sshd_config + Fail2Ban üçlüsü, çoğu otomatik saldırıyı etkisiz kılar.
Henüz yorum yok.
Sohbete katıl. Yorumlar yayınlanmadan önce moderasyondan geçer.