Bir SSH key, sunucuya parola yerine kriptografik bir anahtar çiftiyle giriş yapmanı sağlar. Parolalar kaba kuvvet saldırılarına açıktır, her seferinde elle yazmak yorucudur ve betiklerde otomatikleştirilmesi zordur. Anahtar tabanlı kimlik doğrulama ise hem daha güvenli hem de çok daha pratiktir: bir kez kurarsın, sonra her bağlantıda tek komutla içeri girersin. Bu rehberde sıfırdan anahtar üretmeyi, sunucuya kurmayı ve günlük kullanımda işini kolaylaştıracak ayarları adım adım göreceksin.
SSH key nasıl çalışır?
SSH key iki dosyadan oluşur: özel anahtar (private key) ve genel anahtar (public key). Özel anahtar yalnızca senin bilgisayarında kalır ve asla paylaşılmaz; genel anahtarı ise giriş yapmak istediğin sunucuya kopyalarsın. Bağlanırken sunucu, genel anahtarla bir doğrulama yapar ve yalnızca eşleşen özel anahtara sahip olduğunu kanıtlayabilen istemciyi içeri alır. Bu asimetrik yaklaşım sayesinde özel anahtar hiçbir zaman ağ üzerinden gitmez.
- Özel anahtar:
~/.ssh/id_ed25519— gizli tut, kimseyle paylaşma. - Genel anahtar:
~/.ssh/id_ed25519.pub— sunuculara serbestçe kopyalanabilir.
Anahtar çiftini üretmek
Modern sistemlerde tercih edilen algoritma Ed25519'dur: kısa, hızlı ve güçlüdür. Terminalde şu komutu çalıştır:
ssh-keygen -t ed25519 -C "ad@ornek.com"
-C bayrağı anahtara bir yorum (genellikle e-posta) ekler; bu, birden çok anahtarı ayırt etmeni kolaylaştırır. Komut sana kaydetme yolunu ve bir passphrase (parola) sorar. Varsayılan yolu (~/.ssh/id_ed25519) onaylamak için Enter'a basabilirsin. Passphrase, özel anahtarını ek bir parolayla şifreler; bilgisayarın çalınırsa anahtarı koruma altına alır, bu yüzden boş bırakmaman önerilir.
Eğer sistemin Ed25519'u desteklemiyorsa (çok eski sunucular), 4096 bitlik bir RSA anahtarı güvenli bir alternatiftir:
ssh-keygen -t rsa -b 4096 -C "ad@ornek.com"
Genel anahtarı sunucuya kurmak
En pratik yöntem ssh-copy-id aracıdır. Genel anahtarını sunucudaki ~/.ssh/authorized_keys dosyasına doğru izinlerle ekler:
ssh-copy-id kullanici@sunucu-ip
Bu komut son bir kez parola ister; başarılı olursa bundan sonra anahtarla girersin. ssh-copy-id yoksa (örneğin Windows ya da kısıtlı bir host), genel anahtarı elle ekleyebilirsin:
cat ~/.ssh/id_ed25519.pub | ssh kullanici@sunucu-ip \
"mkdir -p ~/.ssh && chmod 700 ~/.ssh && \
cat >> ~/.ssh/authorized_keys && chmod 600 ~/.ssh/authorized_keys"
İzinler kritiktir: ~/.ssh klasörü 700, authorized_keys dosyası 600 olmalı. Yanlış izinler, SSH'in güvenlik nedeniyle anahtarı reddetmesine ve sessizce yeniden parola sormasına yol açar.
~/.ssh/config ile bağlantıyı kısaltmak
Her seferinde uzun komut yazmak yerine, istemcinde ~/.ssh/config dosyası oluşturup bağlantı için bir takma ad tanımlayabilirsin:
Host sunucum
HostName 46.202.156.61
User kullanici
Port 22
IdentityFile ~/.ssh/id_ed25519
Bu tanımdan sonra ssh sunucum yazmak yeterli olur; SSH doğru adresi, kullanıcıyı, portu ve anahtarı otomatik kullanır. Standart dışı bir port kullanan barındırma sağlayıcılarında (örneğin Port 65002) bu özellikle pratiktir.
ssh-agent ile passphrase'i bir kez girmek
Passphrase koyduysan, her bağlantıda onu yazmak istemezsin. ssh-agent anahtarını oturum boyunca bellekte tutar:
eval "$(ssh-agent -s)"
ssh-add ~/.ssh/id_ed25519
macOS'te anahtarı Keychain'e ekleyip kalıcı yapabilirsin: ssh-add --apple-use-keychain ~/.ssh/id_ed25519. Linux'ta çoğu masaüstü ortamı oturum açışta agent'ı otomatik başlatır; bir kez ssh-add demen yeterli olur.
Parola girişini kapatıp güvenliği sertleştirmek
Anahtarla giriş çalıştığını doğruladıktan sonra, sunucuda parolayla girişi tamamen kapatman güvenliği ciddi şekilde artırır. Sunucuda /etc/ssh/sshd_config dosyasını düzenle:
PasswordAuthentication no
PubkeyAuthentication yes
PermitRootLogin prohibit-password
Değişikliği uygulamak için SSH servisini yeniden başlat: sudo systemctl restart ssh (bazı dağıtımlarda sshd). Önemli: Bu ayarı yapmadan önce mutlaka ayrı bir terminalden anahtarla girebildiğini doğrula; aksi halde kendini sunucudan dışarıda bırakabilirsin.
Aynı anahtarı GitHub gibi servislerde kullanmak
Aynı SSH key'i Git barındırma servislerinde de kullanabilirsin. Genel anahtarının içeriğini kopyala ve GitHub/GitLab ayarlarındaki SSH anahtarları bölümüne yapıştır:
cat ~/.ssh/id_ed25519.pub
Ardından ssh -T git@github.com ile bağlantıyı test edebilirsin. Böylece git push ve git pull işlemleri parola sormadan, anahtarla güvenli şekilde çalışır.
Sık Sorulan Sorular
Özel anahtarımı kaybedersem ne olur?
Özel anahtarın yedeği yoksa, o anahtarla giren her sunucuya yeniden erişimi yeni bir anahtar üretip kurarak sağlaman gerekir. Bu yüzden özel anahtarını güvenli bir yerde yedekle ve asla genel bir depoya veya sohbet kanalına yapıştırma.
Birden fazla bilgisayardan aynı sunucuya girebilir miyim?
Evet. Her bilgisayar için ayrı bir anahtar üretip her birinin genel anahtarını sunucudaki authorized_keys dosyasına eklemen önerilir. Böylece bir cihazı kaybedersen yalnızca onun anahtarını silersin, diğerleri etkilenmez.
Passphrase'i boş bırakmak güvenli mi?
Otomatik betikler ve CI/CD ortamlarında passphrase'siz anahtar gerekebilir, ancak kişisel makinende mutlaka bir passphrase kullan. Passphrase, özel anahtar dosyası başkasının eline geçse bile onu doğrudan kullanılamaz kılar.
Sunucunu güvenli ve sorunsuz şekilde kurmak mı istiyorsun? SSH sertleştirme, dağıtım otomasyonu ve sunucu yönetimi konularında yardıma ihtiyacın varsa benimle iletişime geç.