編譯自:http://ask.xmodulo.com/sshd-error-could-not-load-host-key.html作者: GOLinux
本文地址:https://linux.cn/article-4226-1.html
- -重新生成SSH主機密鑰54%
問題:當我嘗試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_keyOct 16 08:59:45 openstack sshd[1214]: error: Could not load host key: /etc/ssh/ssh_host_dsa_keyOct 16 08:59:45 openstack sshd[1214]: error: Could not load host key: /etc/ssh/ssh_host_ecdsa_keyOct 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