用心打造
VPS知识分享网站

sshd提示no hostkeys available -- exiting,主机密钥修复指南

本文于 2026-11-06 08:24 更新,部分内容具有时效性,如有失效,请留言

OpenSSH服务启动时若提示no hostkeys available -- exiting,表示sshd没有找到任何可以加载的主机私钥。常见原因包括密钥文件缺失、HostKey路径错误、权限不安全或文件损坏。

主机密钥代表服务器身份,重新生成会改变客户端看到的指纹,不能把删掉重建当作第一步。

OpenSSH服务因缺少或无法读取主机私钥而退出的抽象示意图

sshd为什么必须有主机密钥

sshd_config(5)说明,HostKey指定服务器主机私钥,默认路径通常位于/etc/ssh/ssh_host_*_key。sshd会拒绝组用户或其他用户可访问的私钥,避免服务器身份材料泄露。

主机密钥不是用户登录用的authorized_keys。修复前应区分服务端身份密钥与账户公钥,避免改错文件。

先确认路径、权限和配置

从云控制台执行sshd -t检查配置,再用sshd -T | grep -i ^hostkey查看生效路径。对每个路径执行ls -l和ssh-keygen -lf 文件名.pub,核对私钥、公钥、所有者及指纹。必要时查看服务日志中的具体拒绝原因。

不要在当前SSH会话中直接重启一个尚未通过sshd -t的配置。先确认至少一把现有私钥能够被root读取且没有过宽权限。

只补齐真正缺失的默认密钥

若确认默认主机密钥全部缺失,可先备份/etc/ssh,再由root执行ssh-keygen -A。官方ssh-keygen(1)说明,-A会为缺失的默认主机密钥类型生成密钥,已存在的默认密钥不会被覆盖。

随后设置私钥为root所有并限制读取,例如chown root:root /etc/ssh/ssh_host_*_key及chmod 600 /etc/ssh/ssh_host_*_key。自定义HostKey路径不一定由-A生成,必须按配置逐项处理。

指纹变化与版本边界

如果旧密钥仍可从备份或故障磁盘安全恢复,应优先恢复原密钥并核对权限。确需生成新密钥时,先记录新公钥指纹,通过可信通道通知管理员,再更新监控、镜像和主机清单。

客户端出现REMOTE HOST IDENTIFICATION HAS CHANGED时,不应直接删除known_hosts记录。必须先通过控制台或资产系统核实指纹,排除中间人攻击。

恢复服务后的验收

再次运行sshd -t,再重启对应的ssh或sshd服务;保留控制台与原会话,用新终端连接并核对展示的ED25519或其他启用算法指纹。可在萤光云或LightNode的测试VPS演练镜像克隆后的密钥初始化。验收标准是sshd稳定运行、新连接成功、指纹已可信核对,私钥仅root可读且每台主机身份唯一。

FAQ

问:可以从另一台服务器复制主机密钥吗?答:不应这样做;多台主机共享身份密钥会破坏唯一性并扩大泄露影响。

问:ssh-keygen -A会覆盖原密钥吗?答:它用于生成缺失的默认主机密钥,不会覆盖已存在的默认密钥。

问:为什么文件存在仍提示没有密钥?答:可能是HostKey指向别处、权限过宽、格式损坏或服务受沙箱与访问控制限制。

问:只有公钥文件够用吗?答:不够;sshd必须读取对应私钥来证明服务器身份。

问:修复后客户端指纹没变正常吗?答:如果恢复了原私钥或原密钥本来可用,指纹保持不变正是预期结果。

温馨提示

温馨提示:把主机私钥纳入加密备份和严格访问控制,但不要打包进通用VPS模板。新实例首次启动时应生成独立密钥,并把公钥指纹登记到可信资产清单。

赞(0)
未经允许不得转载;国外VPS测评网 » sshd提示no hostkeys available -- exiting,主机密钥修复指南
分享到