启动sshd服务时,报如下的错误信息:
引用
# /usr/local/sbin/sshd
Could not load host key: /usr/local/etc/ssh/ssh_host_rsa1_key
Could not load host key: /usr/local/etc/ssh/ssh_host_rsa_key
Could not load host key: /usr/local/etc/ssh/ssh_host_dsa_key
Disabling protocol version 2. Could not load host key
sshd: no hostkeys available -- exiting.
Could not load host key: /usr/local/etc/ssh/ssh_host_rsa1_key
Could not load host key: /usr/local/etc/ssh/ssh_host_rsa_key
Could not load host key: /usr/local/etc/ssh/ssh_host_dsa_key
Disabling protocol version 2. Could not load host key
sshd: no hostkeys available -- exiting.
一、故障原因
从提示信息可以看出,该问题发生的原因是,sshd服务器启动时,没有找到其自身需要的私钥。一般的OpenSSH版本都支持三种协议:rsa1、rsa2和dsa,这在配置文件中决定:
引用
# cat /usr/local/etc/ssh/sshd_config |grep HostKey
# HostKey for protocol version 1
HostKey /usr/local/etc/ssh/ssh_host_rsa1_key
# HostKeys for protocol version 2
HostKey /usr/local/etc/ssh/ssh_host_rsa_key
HostKey /usr/local/etc/ssh/ssh_host_dsa_key
# HostKey for protocol version 1
HostKey /usr/local/etc/ssh/ssh_host_rsa1_key
# HostKeys for protocol version 2
HostKey /usr/local/etc/ssh/ssh_host_rsa_key
HostKey /usr/local/etc/ssh/ssh_host_dsa_key
※ 注意,根据配置文件定义的不同,例如:使用源码,还是pkg包安装,这些路径可能会有差异。Linux上rpm定义的配置文件,与SCO上源码安装时配置文件中上述密钥的默认名称和路径都不同。需根据实际情况操作。
解决方法很简单,只要生成上述几个私钥文件,并给予适当的权限即可。
二、解决问题
我们知道,通常在Linux发行版下是不会发生这问题的,因为系统提供的rpm包已经生成这些文件的操作,放在启动前进行了。如果刚安装完系统,第一次启动sshd服务时,会有:
引用
# service sshd start
生成 SSH1 RSA 主机键:
[确定]
生成 SSH2 RSA 主机键:
[确定]
正在生成 SSH2 DSA 主机键:
[确定]
启动 sshd:
[确定]
生成 SSH1 RSA 主机键:
生成 SSH2 RSA 主机键:
正在生成 SSH2 DSA 主机键:
启动 sshd:
既然这样,我们就可以参考sshd启动脚本来生成相关的密钥了。
你可以查看/etc//sshd中do_rsa1_keygen()等三个函数的操作,这里不再一一说明。
转换到SCO上,具体的操作步骤就是:
# cd /usr/local/etc/ssh/
# /usr/local/bin/ssh-keygen -q -t rsa1 -f ./ssh_host_rsa1_key -C '' -N ''
# chmod 600 ./ssh_host_rsa1_key
# chmod 644 ./ssh_host_rsa1_key.pub
# /usr/local/bin/ssh-keygen -q -t rsa -f ./ssh_host_rsa_key -C '' -N ''
# chmod 600 ./ssh_host_rsa_key
# chmod 644 ./ssh_host_rsa_key.pub
# /usr/local/bin/ssh-keygen -q -t dsa -f ./ssh_host_dsa_key -C '' -N ''
# chmod 600 ./ssh_host_dsa_key
# chmod 644 ./ssh_host_dsa_key.pub
# /usr/local/bin/ssh-keygen -q -t rsa1 -f ./ssh_host_rsa1_key -C '' -N ''
# chmod 600 ./ssh_host_rsa1_key
# chmod 644 ./ssh_host_rsa1_key.pub
# /usr/local/bin/ssh-keygen -q -t rsa -f ./ssh_host_rsa_key -C '' -N ''
# chmod 600 ./ssh_host_rsa_key
# chmod 644 ./ssh_host_rsa_key.pub
# /usr/local/bin/ssh-keygen -q -t dsa -f ./ssh_host_dsa_key -C '' -N ''
# chmod 600 ./ssh_host_dsa_key
# chmod 644 ./ssh_host_dsa_key.pub
最后,启动sshd服务即可:
完成后。重启sshd :
service sshd restart
# /usr/local/sbin/sshd
# netstat -an|grep 22
# netstat -an|grep 22
问题解决。