Giriş
SSH (Secure Shell) protokolü, uzak sunuculara güvenli bağlantı kurmanızı sağlayan temel bir araçtır. Ancak, uzun süredir kullandığınız bir sunucuya bağlanırken karşınıza Host key verification failed (Host anahtar doğrulama başarısız) hatası çıkabilir. Bu hata, SSH istemcisinin sunucunun kimlik doğrulamasını yapamadığı anlamına gelir ve genellikle sisteminizde kaydedilmiş olan sunucu anahtarının değiştiğini gösterir.
Bu durum, hem olağan bir durum (örneğin sunucunun yeniden yüklenmesi) hem de güvenlik tehdidi (örneğin man-in-the-middle saldırısı) olabilir. Bu kılavuzda, hatanın nedenlerini, nasıl ayırt edileceğini ve güvenli bir şekilde nasıl çözüleceğini adım adım açıklıyoruz.
Hatanın Nedenleri
SSH istemcisi, ilk kez bağlandığınız bir sunucunun kamu anahtarını kaydeder. Bu anahtar, ~/.ssh/known_hosts dosyasında saklanır. Daha sonraki bağlantılarınızda, sunucunun sunduğu anahtar ile kaydedilmiş olan anahtar karşılaştırılır. Eğer bu anahtarlar uyuşmazsa, SSH bağlantıyı reddeder ve aşağıdaki gibi bir uyarı verir:
@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
@ WARNING: REMOTE HOST IDENTIFICATION HAS CHANGED! @
@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
IT IS POSSIBLE THAT SOMEONE IS DOING SOMETHING NASTY!
Someone could be eavesdropping on you right now (man-in-the-middle attack)!
It is also possible that a host key has just been changed.
The fingerprint for the ED25519 key sent by the remote host is
SHA256:abc123....
Please contact your system administrator.
Add correct host key in /home/user/.ssh/known_hosts to get rid of this message.
Offending ED25519 key in /home/user/.ssh/known_hosts:14
Host key verification failed.
Olağan Nedenler
- Sunucunun yeniden yüklenmesi: Sunucunun işletim sistemi veya SSH servisi yeniden kurulduğunda yeni bir anahtar oluşturulur.
- Bulut sunucusu yeniden başlatılması: Bulut platformlarında (AWS, Azure, GCP) bir sanal makine yeniden oluşturulduğunda, aynı IP adresini alabilir ancak yeni bir anahtar oluşturulur.
- IP adresinin yeniden kullanılması: Bir IP adresi başka bir makineye atanmışsa ve siz o IP'ye bağlanmaya çalışıyorsanız, anahtar uyumsuzluğu oluşacaktır.
- Sunucu adının çakışması: Bir sunucu adı farklı bir IP adresine yönlendiriliyorsa ve siz o adı kullanarak bağlanıyorsanız, anahtar uyumsuzluğu oluşabilir.
Güvenlik Tehdidi Olarak Değerlendirilmesi Gereken Durumlar
Uyarı: Eğer sunucunun anahtarının neden değiştiğini açıklayamıyorsanız, bu durumu man-in-the-middle saldırısı olarak değerlendirin. Bağlantıyı kurmadan önce yeni anahtarın doğruluğunu mutlaka doğrulayın.
Hatanın Ayırt Edilmesi
Hatanın nedenini belirlemek için aşağıdaki adımları izleyin:
- Sunucu değişikliğini doğrulayın: Sunucunun yeniden yüklenip yüklenmediğini, IP adresinin değişip değişmediğini veya adının farklı bir makineye yönlendirilip yönlendirilmediğini kontrol edin.
- Yeni anahtarı doğrulayın: Sunucunun yeni anahtarının parmak izini (fingerprint) kontrol edin ve bunu güvenilir bir kaynaktan (örneğin bulut sağlayıcınızın konsolu, sistem yöneticiniz) doğrulayın.
Adım Adım Çözüm Yöntemi
1. Yeni Anahtarı Doğrulayın
Sunucunun yeni anahtarını doğrulamak için aşağıdaki komutu kullanın:
ssh-keyscan example.com | ssh-keygen -lf -
Bu komut, sunucunun anahtarını alır ve parmak izini (SHA256 formatında) ekrana yazdırır. Örnek çıktı:
256 SHA256:abc123def456... example.com (ED25519)
Bu parmak izini, aşağıdaki güvenilir kaynaklarla karşılaştırın:
- Bulut sağlayıcınızın konsolunda gösterilen anahtar.
- Sunucunun ilk kurulumunda kaydedilen anahtar.
- Sistem yöneticinizden aldığınız anahtar.
Eğer parmak izi uyuşuyorsa, anahtar değişikliği olağandır ve eski anahtarı güvenle silebilirsiniz. Eğer uyuşmuyorsa, bağlantıyı kurmayın ve durumu araştırın.
2. Eski Anahtarı Silin
Eski anahtarı silmek için ssh-keygen -R komutunu kullanın. Bu komut, hem kullanıcı hem de sistem düzeyindeki known_hosts dosyalarında kaydedilmiş olan anahtarı temizler:
ssh-keygen -R example.com
Eğer sunucuya hem adla hem de IP adresiyle bağlanıyorsanız, her iki form için de bu komutu çalıştırın:
ssh-keygen -R 192.168.1.10
Bu komutun çıktısı aşağıdaki gibi olacaktır:
# Host example.com found: line 14
/home/user/.ssh/known_hosts updated.
Original contents retained as /home/user/.ssh/known_hosts.old
3. Yeni Anahtarı Kabul Edin
Artık eski anahtar silindiğine göre, SSH size yeni anahtarı kabul etmeniz için bir onay sorusu gösterecektir. Örnek çıktı:
The authenticity of host 'example.com (192.168.1.10)' can't be established.
ED25519 key fingerprint is SHA256:abc123def456....
Are you sure you want to continue connecting (yes/no/[fingerprint])?
Bu ekranda gösterilen parmak izi ile daha önce doğruladığınız parmak izini karşılaştırın. Eğer uyuşuyorsa, yes yazarak devam edin. SSH, yeni anahtarı kaydedecek ve gelecekteki bağlantılar için bu anahtarı kullanacaktır.
Elle Düzenleme Yöntemi
Eğer ssh-keygen -R komutunu kullanmak istemiyorsanız, ~/.ssh/known_hosts dosyasını elle düzenleyebilirsiniz. Hatanın çıktısında belirtilen satırı (örneğin 14. satır) silin. Ancak, birçok sistemde known_hosts dosyası gizlilik nedeniyle özetlenmiş (hashed) olarak saklandığından, elle düzenleme zor olabilir. Bu nedenle, ssh-keygen -R komutu daha güvenilir bir yöntemdir.
Sık Karşılaşılan Sorunlar ve Çözümleri
1. Hata Tekrar Ediyor
Sorun: Eski anahtarı sildikten sonra hata tekrar ortaya çıkıyor.
Çözüm: Muhtemelen hem hostname hem de IP adresi için ayrı kayıtlar bulunmaktadır. Her iki form için de
ssh-keygen -Rkomutunu çalıştırın ve ardından yeniden bağlanmayı deneyin.
2. Sistem Genelindeki Anahtar Sorunu
Sorun: Hata, kullanıcı düzeyindeki
known_hostsdosyasında değil, sistem genelindeki/etc/ssh/ssh_known_hostsdosyasında oluşuyor.Çözüm: Sistem genelindeki dosyayı
sudoyetkisiyle düzenleyin veya aşağıdaki komutla eski anahtarı silin:sudo ssh-keygen -f /etc/ssh/ssh_known_hosts -R example.com
3. Anahtar Parmak İzi Doğrulanamıyor
Sorun: Doğruladığınız parmak izi ile sunucunun sunduğu parmak izi uyuşmuyor.
Çözüm: Bağlantıyı kurmayın. Bu durum, bir saldırı göstergesi olabilir. Doğru anahtarı sistem yöneticinizden veya bulut sağlayıcınızın konsolundan doğrulayın.
4. Anahtarı Kabul Ettikten Sonra Bağlantı Başarısız Oluyor
Sorun: Anahtarı kabul ettikten sonra bağlantı başarısız oluyor.
Çözüm: Bu durum, anahtar doğrulama hatasından değil, genellikle kimlik doğrulama hatasından kaynaklanır. SSH Permission denied (publickey) hatası kılavuzuna başvurun.
SSH Güvenliği için İpuçları
- Bilinen Sunucuları Yönetin: Düzenli olarak
~/.ssh/known_hostsdosyasını kontrol edin ve gereksiz kayıtları silin. - Hashlemeyi Kullanın: Gizlilik için
known_hostsdosyasındaki host adlarını özetleyin. Bunu yapmak için/etc/ssh/ssh_configdosyasına aşağıdaki satırı ekleyin:HashKnownHosts yes - Yedekleme Yapın:
known_hostsdosyasını yedekleyin ve gerektiğinde geri yükleyin. - Güncellemeleri Takip Edin: Sunucularınızı ve SSH istemcinizi düzenli olarak güncelleyin.
SSH Anahtarları Hakkında Sık Sorulan Sorular
1. known_hosts Dosyası Nedir?
known_hosts dosyası, SSH istemcinizin daha önce bağlandığı sunucuların kamu anahtarlarını sakladığı bir dosyadır. Bu dosya, ~/.ssh/known_hosts konumunda bulunur ve SSH istemcisi her yeni bağlantıda bu dosyadaki anahtarları karşılaştırır. Detaylı bilgi için SSH klasörü ve dosyaları kılavuzuna bakabilirsiniz.
2. known_hosts Kaydını Silmek Güvenli midir?
Evet, eğer yeni anahtarın doğruluğunu doğruladıysanız. Bu kayıt sadece SSH istemcisinin sunucuyu yeniden doğrulaması için gereklidir. Ancak, anahtarın neden değiştiğini açıklayamıyorsanız, kayıtı silmeyin ve durumu araştırın.
3. Anahtar Neden Değişir?
En yaygın nedenler:
- Sunucunun yeniden yüklenmesi.
- Bulut sunucusunun yeniden oluşturulması ve aynı IP'yi alması.
- IP adresinin başka bir makineye atanması.
- Sunucu adının farklı bir IP adresine yönlendirilmesi.
4. Bir Sunucunun Anahtar Parmak İzi Nasıl Kontrol Edilir?
Aşağıdaki komutu kullanarak sunucunun anahtar parmak izini alın ve bunu güvenilir bir kaynaktan doğrulayın:
ssh-keyscan host | ssh-keygen -lf -
Sonuç
Host key verification failed hatası, SSH istemcisinin sunucunun anahtarının değiştiğini algıladığında ortaya çıkar. Bu durumu çözmek için yeni anahtarın parmak izini doğrulayın, eski anahtarı güvenli bir şekilde silin ve yeni anahtarı kabul edin. SSH bağlantılarınızı daha güvenli hale getirmek için SSH sertleştirme en iyi uygulamaları kılavuzunu inceleyebilirsiniz.



