SSH Komutu: Güvenli Uzak Baglanti Kurma Rehberi
Bir sistem yoneticisinin en cok kullandigi araclarin basinda SSH gelir. Sabah kahveni aliyorsun, dizustunu aciyorsun ve iki dakika icinde dunyanin oteki ucundaki bir sunucuda komut calistiriyorsun. Bu kadar basit, bu kadar guclu. Ama “basit gorunen sey” tuzagina dusmemek lazim. SSH’i dogru yapilandirmadan kullananlar, farkinda olmadan buyuk guvenlik aciklari birakiyor.
Bu yazida SSH’in temellerinden baslayip ileri seviye kullanim senaryolarina kadar her seyi ele alacagiz. Ister yeni basliyor olun, ister yillardir kullaniyor olun, burada isine yarayacak bir sey bulacaksinizdir.
SSH Nedir ve Neden Bu Kadar Onemli?
SSH (Secure Shell), iki bilgisayar arasinda sifrelenmis bir iletisim kanali kuran bir protokoldur. 1995 yilinda Telnet ve RSH gibi guvenliksiz alternatiflerin yerini almak icin gelistirildi. O protokollerde sifre ve komutlar ag uzerinden duz metin olarak gidiyordu. Yani aradaki biri dinliyorsa her seyi gorebiliyordu.
SSH bu sorunu cozer:
- Sifreleme: Tum trafik sifrelenir
- Kimlik dogrulama: Sunucu ve istemci birbirini dogrular
- Veri butunlugu: Iletilen verinin degistirilmediginden emin olunur
Temel SSH Kullanimi
En basit kullanimiyla SSH sunucuya baglanmak icin sunucu adresi ve kullanici adi yeterlidir:
ssh kullanici@sunucu-adresi
ssh [email protected]
ssh [email protected]
Farkli bir port kullanan sunuculara baglanmak icin -p parametresi kullanilir. Cok fazla sysadmin 22 portunu degistirmeyi onerir, bu yuzden bunu bilmek serit:
ssh -p 2222 [email protected]
ssh -p 8022 [email protected]
Ilk kez baglandiginda SSH sizi soyler ki sunucunun parmak izi bilinmiyor. Bu parmak izini onaylayip onaylamamamiz gerektigini kontrol etmek iyi bir aliskanlik. Onayladiginda bu bilgi ~/.ssh/known_hosts dosyasina yazilir.
SSH Anahtar Yonetimi
Parola ile baglanti kurmak hem guvenli degil hem de pratik degil. Her baglandiginda parola girmek zorunda kalmak, ozellikle script’ler yazarken veya cok sayida sunucu yonetirken cabuk cok can sikiyor. Cozum: SSH anahtar cifti.
Anahtar Cifti Olusturma
# Ed25519 algoritmasi ile anahtar olustur (onerilen)
ssh-keygen -t ed25519 -C "admin@laptop"
# RSA tercih ediyorsaniz (eski sistemlerle uyumluluk icin)
ssh-keygen -t rsa -b 4096 -C "admin@laptop"
# Dosya ismi belirtmek istiyorsaniz
ssh-keygen -t ed25519 -f ~/.ssh/sirket_anahtar -C "sirket-sunuculari"
Bu komut iki dosya olusturur:
~/.ssh/id_ed25519: Ozel anahtar (kimseyle paylasmayacaksiniz!)~/.ssh/id_ed25519.pub: Acik anahtar (sunuculara kopyalayacaginiz)
Acik Anahtari Sunucuya Kopyalama
# En kolay yol
ssh-copy-id kullanici@sunucu-adresi
# Farkli port kullaniyorsa
ssh-copy-id -p 2222 [email protected]
# Manuel yol (ssh-copy-id yoksa)
cat ~/.ssh/id_ed25519.pub | ssh admin@sunucu "mkdir -p ~/.ssh && cat >> ~/.ssh/authorized_keys"
Artik parola girmeden baglanabilirsiniz. Ozel anahtariniza parola (passphrase) koymussaniz, onu girmeniz gerekir. Ama bu sunucu parolasi degil, lokal anahtarinizin parolasi.
SSH Config Dosyasi: Hayat Kurtarici
Gunluk isinizdeki en buyuk verimlilik arttiricilardan biri SSH config dosyasini dogru kullanmak. ~/.ssh/config dosyasini bir kere duzgun ayarlarsaniz, uzun komutlar yazmak yerine kisa takma adlarla baglanti kurabilirsiniz.
# ~/.ssh/config dosyasini olustur/duzenle
nano ~/.ssh/config
Ornek bir config dosyasi:
# ~/.ssh/config
# Genel ayarlar
Host *
ServerAliveInterval 60
ServerAliveCountMax 3
AddKeysToAgent yes
IdentitiesOnly yes
# Uretim web sunucusu
Host web-prod
HostName 203.0.113.50
User deploy
Port 2222
IdentityFile ~/.ssh/uretim_anahtar
# Uretim veritabani (sadece ic ag uzerinden)
Host db-prod
HostName 10.0.1.20
User dbadmin
Port 22
IdentityFile ~/.ssh/uretim_anahtar
ProxyJump web-prod
# Test sunucusu
Host test
HostName 192.168.100.50
User testadmin
Port 22
IdentityFile ~/.ssh/test_anahtar
# Sirket VPN arkasindaki sunucular
Host *.ic.sirket.com
User sysadmin
IdentityFile ~/.ssh/sirket_anahtar
ProxyJump jump-host
# Atlama sunucusu
Host jump-host
HostName jump.sirket.com
User jumpuser
Port 22
IdentityFile ~/.ssh/sirket_anahtar
Bu ayarlarla artik sunlari yapabilirsiniz:
# Uzun versiyon yerine
ssh -p 2222 -i ~/.ssh/uretim_anahtar [email protected]
# Kisa versiyonu kullanabilirsiniz
ssh web-prod
# Veritabani sunucusuna direkt baglanma (ProxyJump otomatik halleder)
ssh db-prod
Tunel ve Port Yonlendirme
SSH’in en guclu ozelliklerinden biri tunel kurabiliyor olmasi. Bunu iyi ogrenmek istiyorum diyen herkese soyluyorum: bu ozellik sayesinde kariyerimde cok zor durumlari kolayca cozdum.
Yerel Port Yonlendirme (Local Port Forwarding)
Diyelim ki uretim sunucusundaki bir veritabanina (port 5432) dogrudan erisemiyorsunuz ama SSH erisimiz var. Yerel port yonlendirme ile bu sorunu cozebilirsiniz:
# Yerel 15432 portuna gelen trafigi, sunucu uzerinden db-sunucu:5432'ye yonlendir
ssh -L 15432:localhost:5432 [email protected]
# Arka planda calistirmak icin -N ve -f ekleyin
ssh -L 15432:localhost:5432 -N -f [email protected]
# Ayni ag icerisindeki baska bir sunucuya yonlendirme
ssh -L 18080:ic-web-sunucu:80 [email protected]
Artik lokal makinenizden localhost:15432 adresine baglandigimizda, uretim veritabanina baglanmis olursunuz. PgAdmin, DBeaver veya herhangi bir veritabani aracini kullanabilirsiniz.
Uzak Port Yonlendirme (Remote Port Forwarding)
Tersi senaryoda, lokal makinenizdeki bir servisi uzak sunucu uzerinden erisime acmak istiyorsunuz:
# Uzak sunucunun 8080 portunu, lokal makinenizin 3000 portuna yonlendir
ssh -R 8080:localhost:3000 [email protected]
Bu ozellik gelistirme sirasinda cok ise yarar. Lokal makinenizde calisan bir web uygulamasini, musteri veya is arkadasiniza gostermek icin sunucu uzerinden erisime acabilirsiniz.
SOCKS Proxy
Tum trafigi SSH tuneli uzerinden gecirmek istiyorsaniz:
# SOCKS5 proxy olustur (lokal port 1080)
ssh -D 1080 -N -f [email protected]
# Tarayicinizi localhost:1080 SOCKS proxy olarak yapilandirin
# Artik tum web trafigi SSH tuneli uzerinden gider
Guvenlik Yapilandirmasi: /etc/ssh/sshd_config
SSH guclu bir arac ama varsayilan yapilandirmayla calistirmak riskli. Sunucu tarafinda yapmaniz gereken temel guvenlik ayarlari:
# /etc/ssh/sshd_config - Onerilen guvenlik ayarlari
# Root girisini engelle
PermitRootLogin no
# Parola ile girisi engelle (sadece anahtar kullan)
PasswordAuthentication no
PubkeyAuthentication yes
# Bos parola ile girisi engelle
PermitEmptyPasswords no
# Maksimum deneme sayisini sinirla
MaxAuthTries 3
# Bekleme zamanini kisalt (30 saniye)
LoginGraceTime 30
# Idle baglantilari kapat
ClientAliveInterval 300
ClientAliveCountMax 2
# Sadece belirli kullanicilara izin ver
AllowUsers deploy sysadmin backup-user
# Veya belirli gruplara
AllowGroups ssh-users
# X11 yonlendirmeyi kapat (gerekmiyorsa)
X11Forwarding no
# Gerekli degil ise kapatin
AllowTcpForwarding no # Sadece tunel kullanmayacaksiniz
# SSH protokolu versiyonu
Protocol 2
Degisiklikleri yaptiktan sonra:
# Syntax kontrolu yap
sshd -t
# Servisi yeniden baslat
systemctl restart sshd
# Veya reload (baglantilari kesmeden)
systemctl reload sshd
Onemli uyari: PasswordAuthentication no yapmadan once mutlaka anahtar ile giris yapabildiginizi test edin. Yoksa sunucudan kilitlenirsiniz.
Gercek Dunya Senaryolari
Senaryo 1: Cok Sunucuda Komut Calistirma
10 sunucuda ayni anda disk kullanim durumunu kontrol etmek istiyorsunuz:
# Basit for dongusuyle
for sunucu in web01 web02 web03 db01 db02; do
echo "=== $sunucu ==="
ssh $sunucu "df -h / | tail -1"
done
# Paralel calistirmak icin arka plana al
for sunucu in web01 web02 web03; do
ssh $sunucu "free -m" &
done
wait
Senaryo 2: Dosya Kopyalama (SCP ve RSYNC)
SSH altyapisini kullanan iki onemli arac:
# SCP ile dosya kopyalama
scp yerel-dosya.txt admin@sunucu:/hedef/dizin/
scp admin@sunucu:/log/app.log ./yerel-dizin/
# Dizin kopyalama
scp -r ./proje/ admin@sunucu:/var/www/
# Rsync ile daha akilli kopyalama (onerilen)
rsync -avz --progress ./proje/ admin@sunucu:/var/www/proje/
# Silinmis dosyalari da yansitmak icin
rsync -avz --delete ./proje/ admin@sunucu:/var/www/proje/
# SSH config'deki takma ad ile
rsync -avz ./proje/ web-prod:/var/www/proje/
Senaryo 3: SSH Agent ile Anahtar Yonetimi
Birden fazla sunucuya zincirleme baglaniyorsaniz (A -> B -> C gibi), her sunucuda ayri anahtar gerektirmek yerine SSH agent kullanabilirsiniz:
# Agent baslatma
eval $(ssh-agent)
# Anahtar ekleme
ssh-add ~/.ssh/id_ed25519
ssh-add ~/.ssh/sirket_anahtar
# Yuklenen anahtarlari listele
ssh-add -l
# Agent yonlendirmesi ile baglan (-A parametresi)
ssh -A [email protected]
# Artik atlama sunucusundan da diger sunuculara anahtarinizla baglanabilirsiniz
Senaryo 4: SSH Ile Anlinda Yedekleme
# Uzak sunucudaki MySQL veritabanini yerel diske yedekle
ssh admin@db-sunucu "mysqldump -u root -pSIFRE veritabani_adi | gzip" > yedek_$(date +%Y%m%d).sql.gz
# Yerel dizini uzak sunucuya senkronize et
rsync -avz -e "ssh -p 2222 -i ~/.ssh/yedek_anahtar" /var/www/ backup@yedek-sunucu:/yedekler/web/
Sik Karsilasilan Sorunlar ve Cozumleri
“Permission denied (publickey)” hatasi:
# Anahtar izinlerini kontrol et
chmod 700 ~/.ssh
chmod 600 ~/.ssh/id_ed25519
chmod 644 ~/.ssh/id_ed25519.pub
chmod 600 ~/.ssh/authorized_keys # Sunucu tarafinda
# Verbose modu ile debug et
ssh -vvv [email protected]
Baglanti cok yavas kopuyor:
# ~/.ssh/config icine ekle
Host *
ServerAliveInterval 60
ServerAliveCountMax 3
TCPKeepAlive yes
“Host key verification failed” hatasi:
# Sunucu yeniden kurulduysa eski kaydi sil
ssh-keygen -R sunucu-adresi
ssh-keygen -R 192.168.1.100
Faydali SSH Parametreleri Ozeti
| Parametre | Aciklama | |———–|———-| | -p PORT | Baglanti portu | | -i DOSYA | Kimlik dosyasi (ozel anahtar) | | -L | Yerel port yonlendirme | | -R | Uzak port yonlendirme | | -D | Dinamik SOCKS proxy | | -N | Komut calistirma (sadece tunel) | | -f | Arka planda calistir | | -A | Agent yonlendirme | | -X | X11 yonlendirme | | -v/-vv/-vvv | Debug ciktisi | | -J | Atlama sunucusu (ProxyJump) |
Sonuc
SSH, sistem yoneticisinin sviyr bicagi gibi bir aractir. Dogru kullandiginda cok isi hizli ve guvenli yapmanizi saglar. Bu yazida temel kullanim, anahtar yonetimi, config dosyasi duzenleme, port yonlendirme ve guvenlik yapilandirmasini ele aldik.
Pratikte en cok kazandiran aliskanliklar su uctur:
- Mutlaka SSH config dosyasini duzenleyin. Bir kez yapilandirmak uzun vadede cok zaman kazandirir.
- Anahtar tabanli kimlik dogrulamaya gecin. Parola yerine anahtar kullanmak hem guvenli hem pratik.
- Sunucu tarafinda gerceksiz servisleri kapatin. Root girisi, parola girisi, gereksiz port yonlendirme izinleri kapatilmali.
Bir de su var: SSH’i ogrendikce “bu kadar sey yapilabiliyormus” diye sasiriyorsunuz. Port tunelleri, SOCKS proxy, ProxyJump gibi ozellikler cok zaman zor problemlere elegant cozumler uretmenizi sagliyor. O yuzden sadece ssh kullanici@sunucu ile kalmayin, bu araclari deneyin ve kendi is akisiniza gore ozellestirin.
Sorulariniz veya eklemek istedikleriniz varsa yorumlarda bulusuruz.
