Jetson Orin(Ubuntu20.04)SSH服务启动失败排查:从“Connection refused”到“no hostkeys available”的解决实录

Jetson Orin(Ubuntu20.04)SSH服务启动失败排查:从“Connection refused”到“no hostkeys available”的解决实录 1. 问题现象与初步诊断上周在调试Jetson Orin开发板时遇到了一个典型的SSH连接问题本机可以SSH连接其他设备但其他设备无法通过SSH登录这台Jetson Orin。执行ssh nvidia127.0.0.1测试时终端直接返回了ssh: connect to host 127.0.0.1 port 22: Connection refused的错误提示。这种情况通常意味着SSH服务根本没有正常运行或者存在网络层面的访问限制。首先检查SSH服务状态是个好习惯。执行systemctl status ssh.service后发现服务处于active (exited)状态但日志中明确显示sshd: no hostkeys available -- exiting的关键错误。这个错误信息直接指向了SSH主机密钥缺失的问题——就像酒店前台没有登记簿就无法验证客人身份一样SSH服务缺少主机密钥就无法建立安全连接。2. 防火墙配置检查与处理虽然错误提示指向密钥问题但稳妥起见还是先排查网络访问限制。Ubuntu系统常用的防火墙工具是UFWUncomplicated Firewall执行以下命令检查状态sudo ufw status如果显示Status: active说明防火墙已启用。接着检查22端口是否开放sudo ufw allow 22 sudo ufw enable不过在我的案例中即使完全关闭防火墙sudo ufw disableSSH连接问题依旧存在。这说明根本原因不在网络层面。此时通过netstat -nltp | grep 22查看端口监听情况果然没有看到SSH服务监听22端口的迹象验证了服务本身没有正常启动。3. SSH服务安装与基本配置确保系统已安装完整的SSH服务组件sudo apt-get install openssh-server openssh-client安装完成后需要检查关键配置文件/etc/ssh/sshd_config主配置文件注意不是ssh_config/etc/ssh/ssh_host_*主机密钥存储位置执行配置测试命令可以提前发现问题sudo sshd -t这个阶段常见的坑是配置文件路径混淆。我就曾误操作了/etc/ssh/ssh_config客户端配置文件而不是服务端配置。正确的做法是sudo vi /etc/ssh/sshd_config确保以下关键参数设置正确Port 22 PermitRootLogin prohibit-password PubkeyAuthentication yes PasswordAuthentication yes4. 主机密钥问题的深度解决核心错误no hostkeys available表明系统缺少SSH主机密钥。这些密钥相当于服务器的数字身份证通常存储在/etc/ssh/目录下包括ssh_host_rsa_keyssh_host_ecdsa_keyssh_host_ed25519_key手动生成密钥的正确姿势sudo ssh-keygen -A这个命令会一次性生成所有必需类型的密钥。如果遇到权限问题比如我最初尝试非sudo执行时出现的Permission denied必须使用sudo提权。完成后检查/etc/ssh/目录应该能看到新生成的密钥文件。比较特殊的情况是Jetson Orin这类ARM架构设备某些密钥类型可能不支持。这时可以单独生成特定类型的密钥sudo ssh-keygen -t rsa -f /etc/ssh/ssh_host_rsa_key -N 5. 服务管理技巧与故障恢复处理systemd服务时正确的操作顺序很重要sudo systemctl stop ssh sudo systemctl daemon-reload sudo systemctl start ssh如果遇到服务文件损坏比如我之前误删了/lib/systemd/system/ssh.service可以通过重新安装openssh-server恢复sudo apt-get --reinstall install openssh-server一个实用的调试技巧是直接运行sshd查看实时输出sudo /usr/sbin/sshd -d这会在前台以调试模式运行SSH服务所有日志直接输出到终端比查systemctl日志更直观。6. 加密算法兼容性调整现代SSH版本逐渐淘汰了一些不安全的加密算法。在Jetson Orin的Ubuntu 20.04上可能需要显式启用传统算法sudo vi /etc/ssh/sshd_config添加或修改以下参数HostKeyAlgorithms ssh-rsa PubkeyAcceptedKeyTypes ssh-rsa这个调整特别适合需要兼容老版本客户端的情况。修改后别忘了重载配置sudo systemctl restart sshd7. 完整问题解决流程复盘结合我的实际解决过程完整的修复路线应该是确认SSH服务安装状态检查防火墙设置验证端口监听情况生成缺失的主机密钥调整加密算法兼容性正确重启服务关键命令检查清单# 安装服务 sudo apt-get install openssh-server # 生成密钥 sudo ssh-keygen -A # 检查端口 netstat -nltp | grep 22 # 测试连接 ssh -v nvidialocalhost8. 经验总结与预防措施这个问题教会我几个重要经验错误日志要逐字阅读最初我忽略了no hostkeys available这个明确提示浪费了时间在防火墙排查上权限意识要强很多操作需要sudo权限特别是系统目录的写入配置文件要认准路径sshd_config和ssh_config一字之差功能完全不同建议在系统初始化时就执行以下预防性操作sudo ssh-keygen -A sudo systemctl enable ssh sudo ufw allow 22对于嵌入式设备如Jetson Orin最好在烧录系统后立即测试SSH功能避免后期调试时才发现基础服务问题。如果经常需要重置设备可以考虑将生成SSH密钥的步骤写入初始化脚本。