Linux有問必答:如何修復“sshd error: could not load host key”

贊 回覆發表於2014-11-14

問題:當我嘗試SSH到一臺遠端伺服器時,SSH客戶端登陸失敗並提示“Connection closed by X.X.X.X”。在SSH伺服器那端,我看到這樣的錯誤訊息:“sshd error: could not load host key.”。這發生了什麼問題,我怎樣才能修復該錯誤?

該SSH連線錯誤的詳細症狀如下。

SSH客戶端方面:當你嘗試SSH到一臺遠端主機時,你沒有看見登入螢幕,你的SSH連線就立即關閉,並提示此訊息:“Connection closed by X.X.X.X”。

SSH伺服器方面:在系統日誌中,你看到如下錯誤訊息(如,在Debian/Ubuntu上,/var/log/auth.log)。

Oct 16 08:59:45 openstack sshd[1214]: error: Could not load host key: /etc/ssh/ssh_host_rsa_key
Oct 16 08:59:45 openstack sshd[1214]: error: Could not load host key: /etc/ssh/ssh_host_dsa_key
Oct 16 08:59:45 openstack sshd[1214]: error: Could not load host key: /etc/ssh/ssh_host_ecdsa_key
Oct 16 08:59:45 openstack sshd[1214]: fatal: No supported key exchange algorithms [preauth]

導致該問題的根源是,sshd守護程式不知怎麼地不能載入SSH主機金鑰了。

當OpenSSH伺服器第一次安裝到Linux系統時,SSH主機金鑰應該會自動生成以供後續使用。如果,不管怎樣,金鑰生成過程沒有成功完成,那就會導致這樣的SSH登入問題。

讓我們檢查能否在相應的地方找到SSH主機金鑰。

$ ls -al /etc/ssh/ssh*key 

如果SSH主機金鑰在那裡找不到,或者它們的大小被截斷成為0(就像上面那樣),你需要從頭開始重新生成主機金鑰。

重新生成SSH主機金鑰

在Debian、Ubuntu或其衍生版上,你可以使用dpkg-reconfigure工具來重新生成SSH主機金鑰,過程如下:

$ sudo rm -r /etc/ssh/ssh*key
$ sudo dpkg-reconfigure openssh-server 

在CentOS、RHEL或Fedora上,你所要做的是,刪除現存(有問題的)金鑰,然後重啟sshd服務。

$ sudo rm -r /etc/ssh/ssh*key
$ sudo systemctl restart sshd

另外一個重新生成SSH主機金鑰的方式是,使用ssh-keygen命令來手動生成。

$ sudo ssh-keygen -t rsa -f /etc/ssh/ssh_host_rsa_key
$ sudo ssh-keygen -t dsa -f /etc/ssh/ssh_host_dsa_key
$ sudo ssh-keygen -t ecdsa -f /etc/ssh/ssh_host_ecdsa_key 

在生成新的SSH主機金鑰後,確保它們能在/etc/ssh目錄中找到。此時,不必重啟sshd服務。

 $ ls -al /etc/ssh/ssh*key 

現在,再試試SSH到SSH伺服器吧,看看問題是否已經離你而去了。


via: http://ask.xmodulo.com/sshd-error-could-not-load-host-key.html

譯者:GOLinux 校對:wxy

本文由 LCTT 原創翻譯,Linux中國 榮譽推出

相關文章