SSH Kullanım Rehberi: Güvenli Uzak Bağlantı

SSH (Secure Shell), sunuculara güvenli uzak bağlantı sağlayan protokoldür. Telnet gibi güvensiz protokollerin yerini aldı. SSH Nedir? SSH, güvenli...

Linux
SSH Kullanım Rehberi: Güvenli Uzak Bağlantı

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:

  1. 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.
  2. 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).
  3. 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ı + sudo ile 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 (~/.ssh 700, anahtarlar 600).
  • Fail2Ban veya benzeri bir brute-force koruması aktif.
  • known_hosts uyarı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.

Celil Uyanikoglu

Yazan Celil Uyanikoglu

25 yıldır bilgi işlem piyasasında farklı dallarda uzmanlaşan bir Bilgisayar Mühendisi

Yorum

Henüz yorum yok.

Sohbete katıl. Yorumlar yayınlanmadan önce moderasyondan geçer.

Yorum yap

E-posta adresin yayınlanmaz. Yorumlar moderasyondan sonra yayınlanır.

Sırada

İlgili notlar