Linux 故障笔记:SSH 服务启动失败 (no hostkeys available)

十一月 19, 2025 / Administrator / 0阅读 / 0评论

1. 故障概要

  • 日期: 2025年11月04日 (根据日志时间)

  • 受影响系统: zy-VMware-Virtual-Platform (Ubuntu Linux)

  • 故障描述: ssh.service 服务无法启动。使用 systemctl status ssh.service 查看时,服务状态显示为 Failed with result 'exit-code',日志中显示服务在尝试启动后立即失败,并因重启过于频繁而被 systemd 停止。

2. 诊断与排查过程

2.1. 初步现象 (日志截图 1)

1024X742/image-20251104103955910.png

初次检查 systemctl status ssh.service 或相关 systemd 日志时,观察到的关键信息是(如上图所示):

An ExecStartPre= process belonging to unit ssh.service has exited.
The process' exit code is 'exited' and its exit status is 1.
  • 分析: 这表明 systemd正式运行 SSH 服务之前,执行一个预启动脚本 (ExecStartPre=) 时失败了。在 ssh.service 中,这个预启动脚本通常是 sshd -t(配置文件语法测试)或一个检查密钥的脚本。

2.2. 深入诊断 (日志截图 2)

1024X512/image-20251104104006642.png
为了查看 sshd 进程本身的确切错误,通过 journalctl -u ssh.service 或查看更详细的 systemd 日志,发现了更具体的错误信息(如上图所示):

Nov 04 10:23:38 zy-VMware-Virtual-Platform sshd[3103]: sshd: no hostkeys available -- exiting.
Nov 04 10:23:38 zy-VMware-Virtual-Platform systemd[1]: ssh.service: Control process exited, code=exited, status=1/FAILURE
  • 分析: 这条日志是诊断的关键。它不是 systemd 报的错,而是 sshd 进程(SSH 守护进程)自己打印的退出信息。

  • 中文含义: sshd 进程报告:“没有可用的主机密钥——正在退出。

3. 根本原因分析 (RCA)

  • 直接原因: SSH 守护进程 (sshd) 在启动时,会检查其配置目录(通常是 /etc/ssh/)是否存在用于向客户端标识自己身份的主机密钥(Host Keys),例如 ssh_host_rsa_keyssh_host_ed25519_key 等。

  • 安全机制: 这是 SSH 协议的安全核心。如果服务器没有这些密钥,它就无法向连接的客户端证明自己的身份,也无法协商安全加密。为了防止不安全的连接和潜在的中间人攻击,sshd 被设计为在这种致命配置错误下主动拒绝启动

  • 根本原因 (推测): 用户通常不会手动删除这些密钥。此问题的最常见根源是:openssh-server 软件包在系统安装软件包初始化时,其安装脚本未能成功运行 ssh-keygen -A(自动生成所有类型密钥的命令)。这可能是由于安装被中断、使用了精简的系统镜像或初始化脚本出错导致的。

4. 解决方案与后续步骤

4.1. 解决方案

  1. 手动生成密钥: 通过 ssh-keygen 工具手动生成所有缺失的主机密钥。

    sudo ssh-keygen -A
    
    • -A 标志会为所有支持的密钥类型(RSA, DSA, ECDSA, Ed25519)创建密钥文件(如果它们不存在)。
  2. 重启 SSH 服务: 生成密钥后,sshd 进程启动时就能找到它们了。

    sudo systemctl start ssh.service
    
  3. 验证服务: 检查服务状态,确认其已成功运行。

    sudo systemctl status ssh.service
    
    • 状态应显示为 active (running)

4.2. 经验总结

  • systemd 报告的 exit-code 错误通常是一个通用结果。

  • 排查 systemd 服务失败时,必须使用 journalctl -u <service-name> 来查看服务进程本身输出的详细错误日志,才能定位到真正的问题。

  • sshd: no hostkeys available 是一个明确的配置问题,表示 /etc/ssh/ 目录中缺少主机密钥文件。

文章作者:Administrator

文章链接:http://localhost:8090/archives/wei-ming-ming-wen-zhang-jsSk9f0w

版权声明:本博客所有文章除特别声明外,均采用CC BY-NC-SA 4.0 许可协议,转载请注明出处!


评论