SSH (Secure Shell) Nedir?
SSH (Secure Shell), ağ üzerindeki sistemlere güvenli bir şekilde uzaktan erişmek için kullanılan kriptografik bir ağ protokolüdür. Günümüzde sistem yöneticileri, ağ uzmanları, siber güvenlik uzmanları ve DevOps mühendisleri tarafından en yaygın kullanılan yönetim araçlarından biridir.
SSH; uzaktaki bir sunucuyu yönetmek, dosya transferi yapmak, tünelleme gerçekleştirmek, komut çalıştırmak ve güvenli bağlantılar kurmak amacıyla kullanılmaktadır.
SSH Neden Geliştirildi?
Eskiden uzak sistemlere erişmek için aşağıdaki protokoller kullanılıyordu:
Telnet
Rlogin
RSH
Bu protokollerin en büyük problemi:
❌ Şifreleri düz metin (Plain Text) göndermeleri
Bir saldırgan ağ trafiğini dinlediğinde kullanıcı adı ve şifreyi kolayca ele geçirebiliyordu.
SSH bu sorunu çözmek amacıyla geliştirildi.
SSH'nin Sağladığı Güvenlik Özellikleri
✅ Şifreleme (Encryption)
✅ Kimlik Doğrulama (Authentication)
✅ Veri Bütünlüğü (Integrity)
✅ Güvenli Dosya Transferi
SSH Nasıl Çalışır?
SSH istemci-sunucu mimarisine sahiptir.
+-------------+ İnternet/LAN +-------------+| SSH Client | <-----------------------------> | SSH Server |+-------------+ +-------------+
Örnek:
ssh user@192.168.1.100
Burada:
SSH Client: Bağlanan bilgisayar
SSH Server: Bağlantıyı kabul eden bilgisayar
SSH Mimarisi
SSH üç temel katmandan oluşur.
1. Transport Layer Protocol
Görevleri:
Sunucunun doğrulanması
Şifreleme algoritmasının seçilmesi
Oturum anahtarlarının oluşturulması
Kullanılan algoritmalar:
AESChaCha203DESBlowfish
2. User Authentication Protocol
Kullanıcının kimliğini doğrular.
Yöntemler:
Parola doğrulama
Public Key doğrulama
Kerberos
Multi-Factor Authentication
3. Connection Protocol
Tek bir SSH bağlantısı içerisinde birçok kanal açılmasını sağlar.
Örneğin:
- Terminal oturumu- SCP- SFTP- Port yönlendirme
SSH Portu
Varsayılan SSH portu:
TCP/22
Kontrol:
Linux:
ss -tulnp | grep ssh
veya
netstat -tulnp | grep ssh
Nmap ile:
nmap -p22 192.168.1.10
Örnek çıktı:
22/tcp open ssh
OpenSSH
Linux sistemlerde en yaygın SSH yazılımı OpenSSH'dır.
Bileşenleri:
| Bileşen | Açıklama |
|---|---|
| ssh | İstemci |
| sshd | Sunucu |
| scp | Güvenli dosya transferi |
| sftp | Güvenli dosya transferi |
| ssh-keygen | Anahtar üretimi |
| ssh-copy-id | Anahtar kopyalama |
| ssh-agent | Anahtar yönetimi |
SSH Kurulumu
Debian / Ubuntu / Pardus
Kurulum:
sudo apt updatesudo apt install openssh-server -y
Servisi başlatma:
sudo systemctl start ssh
Servis durumu:
sudo systemctl status ssh
Açılışta otomatik başlatma:
sudo systemctl enable ssh
RHEL/CentOS/Rocky Linux
sudo dnf install openssh-server -y
Başlatma:
sudo systemctl enable ssh --now
SSH Sunucu Yapılandırması
Ana yapılandırma dosyası:
/etc/ssh/sshd_config
Dosyayı düzenleme:
sudo nano /etc/ssh/sshd_config
Önemli SSH Ayarları
Port Değiştirme
Varsayılan:
Port 22
Örnek:
Port 2222
Bağlantı:
ssh -p 2222 user@192.168.1.10
Root Girişini Kapatmak
PermitRootLogin no
Parola ile Girişi Kapatmak
PasswordAuthentication no
Belirli Kullanıcılara İzin Vermek
AllowUsers admin testuser
Boş Şifreleri Engellemek
PermitEmptyPasswords no
Maksimum Deneme Sayısı
MaxAuthTries 3
Değişiklik sonrası:
sudo systemctl restart ssh
SSH Bağlantısı Kurmak
Temel kullanım:
ssh kullanıcı@hedef_ip
Örnek:
ssh nuri@192.168.1.20
Alan adı ile:
ssh admin@server.example.com
SSH Bağlantı Süreci
1. TCP bağlantısı kurulur.2. Algoritmalar belirlenir.3. Sunucu kimliği doğrulanır.4. Oturum anahtarı oluşturulur.5. Kullanıcı doğrulanır.6. Şifreli oturum başlar.
İlk Bağlantıda Parmak İzi (Fingerprint)
İlk bağlantıda:
The authenticity of host can't be established.
Örnek:
ED25519 key fingerprint is:SHA256:ABC123XYZ...
Kabul etmek için:
yes
Anahtar:
~/.ssh/known_hosts
dosyasına kaydedilir.
SSH Anahtar Tabanlı Kimlik Doğrulama
Parola yerine kriptografik anahtarlar kullanılır.
Avantajları
✅ Daha güvenlidir.
✅ Brute-force saldırılarına dayanıklıdır.
✅ Otomasyon için uygundur.
- Küçük Anahtar Boyutu: Yalnızca 32 bayt (256-bit) açık anahtar ve 64 bayt imza boyutuyla son derece kompakttır.
- Üstün Güvenlik: 128-bitlik bir güvenlik seviyesi sunarak yaygın kriptografik saldırılara karşı oldukça dirençlidir.
- Yüksek Hız: Hem imzalama hem de doğrulama işlemleri geleneksel RSA algoritmalarına kıyasla çok daha hızlıdır.
- Yan Kanal Saldırılarına Karşı Direnç: Önbellek zamanlama saldırıları gibi durumlara karşı bağışıktır.
- SSH Bağlantıları: Uzak sunuculara veya GitHub gibi platformlara erişirken geleneksel RSA anahtarlarının yerine daha hızlı ve güvenli bir alternatif olarak kullanılır.
- Blok Zinciri: Birçok kripto para birimi ve cüzdan sisteminde işlem imzalamak için tercih edilir.
Pardus (veya herhangi bir Debian tabanlı sistem) üzerinde SSH anahtar tabanlı kimlik doğrulaması (Public Key Authentication) kurmak, sunucu güvenliğinizi artırmanın en etkili yollarından biridir. Bu yöntem, geleneksel parolalara kıyasla "kaba kuvvet" (brute-force) saldırılarına karşı çok daha dayanıklıdır.
Bu işlemi gerçekleştirirken, İstemci (bağlantıyı başlatan kendi bilgisayarınız) ve Sunucu (bağlanacağınız Pardus makinesi) olmak üzere iki tarafta işlem yapacağız.
Aşağıdaki adımları sırasıyla uygulayarak güvenli bağlantınızı kurabilirsiniz. Şifre ile girişi kapatma adımını, sadece anahtarınızın çalıştığından emin olduktan sonra yapmanız çok önemlidir, aksi takdirde sunucunuza erişiminizi kaybedebilirsiniz.
1.İstemci Makinede Anahtar Çifti Oluşturma:Bağlantıyı yapacağınız kendi bilgisayarınızda uygulanır.
Öncelikle kendi bilgisayarınızda bir genel (public) ve bir gizli (private) anahtar oluşturmanız gerekiyor. Güvenlik ve performans açısından güncel standart olan ed25519 algoritmasını kullanacağız.
Terminali açın ve şu komutu girin:
ssh-keygen -t ed25519 -C "akalesi@istemci_bilgisayar"
(Eğer sisteminiz eski ve ed25519 desteklemiyorsa ssh-keygen -t rsa -b 4096 kullanabilirsiniz.)
Komutu çalıştırdıktan sonra size üç soru sorulacak:
Dosya konumu: Varsayılan konumu (genellikle ~/.ssh/id_ed25519) kabul etmek için doğrudan Enter'a basın.
Parola (Passphrase): Ekstra güvenlik için anahtarınıza bir şifre koyabilirsiniz. Bu, bilgisayarınız çalınırsa anahtarınızın kullanılmasını engeller. Boş bırakıp Enter'a basarsanız, SSH yaparken hiçbir şifre sorulmaz. (Tekrar onaylamak için bir kez daha soracaktır).
2.Açık Anahtarı Pardus Sunucusuna Kopyalama:ssh-copy-id aracı ile otomatik işlem.
Şimdi oluşturduğumuz açık anahtarı (public key), bağlanmak istediğimiz Pardus sunucusuna göndermeliyiz. Bunun için en kolay yol ssh-copy-id komutunu kullanmaktır.
ssh-copy-id kullanici_adi@sunucu_ip_adresi
Örneğin: ssh-copy-id pardus@192.168.1.50
Bu komutu girdiğinizde sunucu sizden son bir kez kullanıcı parolanızı isteyecektir. Parolayı girdiğinizde, sistem açık anahtarınızı sunucudaki ~/.ssh/authorized_keys dosyasına güvenli bir şekilde ekler.
3.Bağlantıyı Test Etme:Parolasız girişi doğrulama.
Anahtarınızın doğru yüklenip yüklenmediğini test etme zamanı. Klasik SSH bağlanma komutunuzu çalıştırın:
ssh kullanici_adi@sunucu_ip_adresi
Eğer anahtar oluştururken passphrase boş bıraktıysanız, doğrudan Pardus terminaline düşmelisiniz.
Eğer passphrase belirlediyseniz, sistem size Pardus kullanıcısının parolasını değil, anahtarınızın şifresini (passphrase) soracaktır.
Bağlantıyı başarılı bir şekilde sağladıysanız son adıma, yani güvenliği sıkılaştırma aşamasına geçebilirsiniz.
4.Parola ile Girişi Kapatma (Güvenlik Sıkılaştırması):Sadece başarılı testten sonra sunucuda uygulanır.
Sadece anahtarı olanların girebilmesi için, geleneksel parola ile giriş özelliğini Pardus sunucusu üzerinden tamamen kapatacağız.
Pardus sunucusuna SSH ile bağlıyken, SSH yapılandırma dosyasını yetkili kullanıcı (root/sudo) olarak açın:
sudo nano /etc/ssh/sshd_config
Dosya içinde yön tuşlarıyla aşağı inin ve PasswordAuthentication satırını bulun. Başında # işareti varsa silin ve karşısındaki değeri no yapın:
PasswordAuthentication no
Dosyayı kaydetmek için CTRL + O ve Enter'a basın, çıkmak için CTRL + X yapın. Değişikliklerin aktif olması için SSH servisini yeniden başlatın:
sudo systemctl restart ssh
Önemli Not: Kendi bilgisayarınızda bulunan gizli anahtarınızı (örneğin id_ed25519 dosyasını) kesinlikle kimseyle paylaşmayın. Pardus sunucusuna kopyalanan anahtar, sadece açık anahtardır (id_ed25519.pub).
Anahtar tabanlı (public key) bağlantınızı başarıyla test edip onayladıysanız, klasik parola ile girişi tamamen kapatmak sunucunuzu otomatik saldırılara (brute-force) karşı neredeyse aşılamaz hale getirir.
Bu işlem için SSH yapılandırma dosyasında (sshd_config) sadece parola girişini değil, arka kapı bırakmamak adına klavye etkileşimli (keyboard-interactive) girişleri de kapatmamız gerekir.
İşte adım adım uygulanması gerekenler:
1.Yapılandırma Dosyasını Açma:
Pardus sunucunuza SSH anahtarınız ile bağlandıktan sonra, SSH yapılandırma dosyasını yetkili kullanıcı olarak açın:
sudo nano /etc/ssh/sshd_config
2.Parola Doğrulamasını Kapatma:
Dosya içerisinde yön tuşlarıyla gezinerek PasswordAuthentication satırını bulun. Başındaki # (yorum) işaretini kaldırın ve karşısındaki değeri no olarak ayarlayın.
PasswordAuthentication no
3.Klavye Etkileşimli Girişi Kapatma:Bazı sistemlerde parola sorma ekranının farklı bir protokolle gelmesini engeller.
Yine aynı dosya içinde KbdInteractiveAuthentication (eski sürümlerde ChallengeResponseAuthentication olarak geçebilir) satırını bulun ve no olarak değiştirin.
KbdInteractiveAuthentication no
4.Root Kullanıcısının Girişini Sınırlandırma:Opsiyonel ama şiddetle tavsiye edilir.
En yetkili kullanıcı olan root hesabına dışarıdan doğrudan erişimi sınırlandırmak için PermitRootLogin satırını bulun. Sadece anahtar ile girişe izin vermek için şu şekilde ayarlayın:
PermitRootLogin prohibit-password
(Eğer root ile SSH üzerinden hiç işiniz yoksa, burayı doğrudan no da yapabilirsiniz.)
5.Kaydetme ve Servisi Yeniden Başlatma:
Değişiklikleri kaydetmek için klavyenizden sırasıyla CTRL + O (kaydet), Enter (dosya adını onayla) ve CTRL + X (çıkış) tuşlarına basın.
Son olarak, yaptığımız bu ayarların geçerli olması için SSH servisini yeniden başlatın:
sudo systemctl restart ssh
Kritik Uyarı: Bu işlemi yaptıktan sonra mevcut SSH bağlantınızı kapatmadan, bilgisayarınızda yeni bir terminal penceresi açıp sunucuya tekrar bağlanmayı deneyin. Eğer yeni pencerede anahtarınızla sorunsuz girebiliyorsanız, her şeyi doğru yapmışsınız demektir.
SSH Anahtar Çifti Oluşturma
RSA:
ssh-keygen -t rsa -b 4096
ED25519:
ssh-keygen -t ed25519
Örnek çıktı:
id_ed25519id_ed25519.pub
Anahtarların Görevi
Özel Anahtar (Private Key)id_ed25519
Gizli tutulmalıdır.
Açık Anahtar (Public Key)id_ed25519.pub
Sunucuya kopyalanır.
Anahtarı Sunucuya Kopyalama
ssh-copy-id user@192.168.1.20
Manuel yöntem:
cat ~/.ssh/id_ed25519.pub
Sunucuda:
~/.ssh/authorized_keys
dosyasına eklenir.
Özel Anahtar Kullanarak Bağlanmak
ssh -i ~/.ssh/id_ed25519 user@192.168.1.20
SSH Agent Kullanımı
Anahtarın sürekli girilmesini önler.
Başlat:
eval $(ssh-agent)
Anahtar ekle:
ssh-add ~/.ssh/id_ed25519
Listele:
ssh-add -l
SCP Kullanımı
Dosya gönderme:
scp dosya.txt user@192.168.1.20:/home/user/
Dizin gönderme:
scp -r klasor user@192.168.1.20:/home/user/
Sunucudan dosya çekme:
scp user@192.168.1.20:/tmp/test.txt .
SFTP Kullanımı
Bağlan:
sftp user@192.168.1.20
Komutlar:
lspwdcdputgetmkdirrm
SSH Tünelleme (Port Forwarding)
SSH'nin en güçlü özelliklerinden biridir.
Local Port Forwarding
ssh -L 8080:localhost:80 user@server
Yerel:
localhost:8080
Sunucu üzerindeki:
localhost:80
servisine yönlendirilir.
Remote Port Forwarding
ssh -R 4444:localhost:22 user@server
Dynamic Port Forwarding (SOCKS Proxy)
ssh -D 9050 user@server
Tarayıcı SOCKS Proxy:
127.0.0.1:9050
X11 Forwarding
Grafik uygulamalarını uzaktan çalıştırır.
Sunucuda:
X11Forwarding yes
Bağlan:
ssh -X user@server
Örnek:
firefox
SSH Yapılandırma Dosyası
İstemci dosyası:
~/.ssh/config
Örnek:
Host webserverHostName 192.168.1.50User adminPort 2222IdentityFile ~/.ssh/id_ed25519
Artık:
ssh webserver
yeterlidir.
SSH Güvenliği İçin En İyi Uygulamalar
1. Portu Değiştirin
Port 2222
2. Root Girişini Kapatın
PermitRootLogin no
3. Anahtar Tabanlı Kimlik Doğrulama Kullanın
PasswordAuthentication no
4. Fail2Ban Kurun
Örnek:
sudo apt install fail2ban
5. CrowdSec Kullanın
Davranış tabanlı koruma sağlar.
6. MFA Etkinleştirin
Google Authenticator gibi.
7. Güncel Yazılım Kullanın
sudo apt update && sudo apt upgrade
Siber Güvenlik Perspektifinden SSH
Sızma testlerinde SSH keşfi önemlidir.
Servis Tespiti
nmap -sV -p22 hedef_ip
SSH Algoritma Keşfi
nmap --script ssh2-enum-algos -p22 hedef_ip
Anahtar Bilgisi Toplama
ssh-keyscan hedef_ip
Banner Toplama
nc hedef_ip 22
Örnek:
SSH-2.0-OpenSSH_9.2p1 Debian-2
Zafiyet Taraması
nmap --script ssh-auth-methods -p22 hedef_ip
SSH'da Yaygın Saldırılar
Brute Force
Credential Stuffing
Password Spraying
MITM
SSH Tünel Kötüye Kullanımı
Anahtar Hırsızlığı
Yetkisiz Forwarding
Günlük Dosyaları
Debian/Pardus:
/var/log/auth.log
RHEL:
/var/log/secure
Başarısız girişler:
sudo grep "Failed password" /var/log/auth.log
Yararlı SSH Komutları
ssh -Vssh -v user@hostssh -vv user@hostssh -vvv user@hostssh-keygen -l -f ~/.ssh/id_ed25519.pubssh-copy-id user@hostssh-agentssh-addssh-keyscan host
Sonuç
SSH, modern Linux ve Unix sistemlerinin vazgeçilmez bileşenlerinden biridir. Sunucu yönetiminden sızma testlerine, otomasyondan güvenli dosya transferine kadar çok geniş kullanım alanlarına sahiptir. SSH'nin güvenli yapılandırılması; güçlü anahtar kullanımı, parola girişlerinin kapatılması, çok faktörlü kimlik doğrulama ve düzenli log takibi ile sağlanmalıdır.
Bu bilgiler; sistem yöneticileri, ağ uzmanları, DevOps mühendisleri ve siber güvenlik profesyonelleri için SSH'yi etkin ve güvenli kullanmanın temelini oluşturmaktadır.
Daha önce yapılandırdığımız Pardus sunucunuzun güvenliğini bir adım daha öteye taşımak ve anahtar tabanlı (Public Key) girişinize bir de Çok Faktörlü Kimlik Doğrulama (MFA/2FA) eklemek, sisteminizi adeta aşılamaz bir kaleye dönüştürür.
Böylece sunucuya giriş yapmak için hem bilgisayarınızdaki SSH anahtarına hem de cep telefonunuzdaki tek kullanımlık şifreye ihtiyacınız olacaktır.
Pardus (ve Debian tabanlı sistemler) üzerinde SSH için MFA etkinleştirme işlemini Google Authenticator PAM modülü ile şu şekilde yapabilirsiniz:
1. Gerekli Modülün Kurulması
Öncelikle sunucunuza SSH anahtarınız ile bağlanın ve Google Authenticator için gerekli PAM (Pluggable Authentication Modules) kütüphanesini kurun:
sudo apt update
sudo apt install libpam-google-authenticator
2. Kullanıcı İçin MFA'nın Başlatılması
Kurulum bittikten sonra, MFA'yı etkinleştirmek istediğiniz kullanıcı hesabı ile (root kullanmamanız tavsiye edilir) terminale şu komutu girin:
google-authenticator
Bu komut size birkaç soru soracak ve bir yapılandırma süreci başlatacaktır:
Time-based (Zaman tabanlı) token istiyor musunuz? y (evet) diyerek onaylayın.
Ekranda devasa bir QR Kod belirecektir. Cep telefonunuza indirdiğiniz bir MFA uygulamasıyla (Google Authenticator, Microsoft Authenticator, Authy veya Bitwarden gibi) bu QR kodu okutun.
QR kodun altında size "Emergency scratch codes" (Acil durum kurtarma kodları) verilecektir. Bu kodları mutlaka güvenli bir yere kopyalayın. Telefonunuzu kaybetmeniz durumunda sunucuya bu kodlarla girebilirsiniz.
Dosyanın güncellenmesi: y diyerek onaylayın.
Aynı token'ın birden fazla kullanımını engelleme: Güvenlik için y deyin.
Zaman sapması (Time skew) toleransı: Genellikle n (hayır) demek güvenlidir, ancak telefonunuzun ve sunucunuzun saati tam senkronize değilse sorun yaşarsanız daha sonra açabilirsiniz.
Rate-limiting (Hız sınırı): Kaba kuvvet saldırılarını yavaşlatmak için y diyerek onaylayın.
3. PAM Yapılandırmasını Düzenleme
Şimdi sunucunun MFA sorması gerektiğini sisteme söylemeliyiz.
sudo nano /etc/pam.d/sshd
Açılan dosyanın en altına inin ve şu satırı ekleyin:
auth required pam_google_authenticator.so
(Dosyayı CTRL + O, Enter ve CTRL + X ile kaydedip çıkın.)
4. SSH Servisi Ayarlarını Güncelleme
Bir önceki rehberde parolaları ve klavye etkileşimini kapatmıştık. MFA'nın (doğrulama kodunun) size sorulabilmesi için klavye etkileşimini tekrar açmamız, ancak güvenliği sağlamak için sisteme "Hem Anahtar Hem MFA zorunludur" komutunu vermemiz gerekiyor.
sudo nano /etc/ssh/sshd_config
Dosya içinde şu değişiklikleri yapın:
Daha önce no yaptığımız klavye etkileşimini bulun ve yes yapın:
KbdInteractiveAuthentication yes
Dosyanın en altına inin ve SSH'ın giriş için hangi yöntemleri sırasıyla zorunlu tutacağını belirten şu satırı ekleyin:
AuthenticationMethods publickey,keyboard-interactive
(Dosyayı CTRL + O, Enter ve CTRL + X ile kaydedip çıkın.)
5. Servisi Yeniden Başlatma ve Test Etme
Değişiklikleri uygulamak için SSH servisini yeniden başlatın:
sudo systemctl restart ssh
Kritik Uyarı: Sunucuyla olan mevcut SSH bağlantınızı kesinlikle kapatmayın. Yeni bir terminal penceresi açın ve sunucuya bağlanmayı deneyin. Sistem önce SSH anahtarınızı doğrulayacak, ardından terminalde size Verification code: (Doğrulama kodu) soracaktır. Telefonunuzdaki uygulamada yazan 6 haneli kodu girdiğinizde sunucuya başarıyla erişmiş olacaksınız.
Bu kuruluma başlamadan önce, sistemin kusursuz çalışması için küçük ama çok kritik bir detayı eklemek isterim:
Zaman tabanlı tek kullanımlık şifre (TOTP) sistemlerinin doğru çalışabilmesi için Pardus sunucunuzun saatinin saniyesi saniyesine doğru olması gerekir. Sunucu saati ile telefonunuzun saati arasında birkaç saniyelik bir fark bile olsa, ürettiğiniz kodlar sunucu tarafından reddedilecektir.
MFA kurulumuna geçmeden önce sunucunuzda zaman senkronizasyonunun (NTP) aktif ve güncel olduğundan emin olmak için şu komutları çalıştırabilirsiniz:
sudo timedatectl set-ntp true
sudo timedatectl status
Çıktıda System clock synchronized: yes ibaresini görüyorsanız, sunucunuz MFA için tamamen hazır demektir.
Yorumlar