如何手动将主机添加至known_hosts?执行命令后文件仍为空
解决ssh-keyscan无法写入known_hosts的问题
可能的原因及修复步骤
1. 目标主机不可达或SSH端口未开放
ssh-keyscan需要成功连接目标主机的SSH端口(默认22端口)才能生成主机密钥,若主机离线、端口关闭或被防火墙拦截,命令无输出自然无法写入文件。
- 先验证连通性:执行
ping 195.118.254.45或telnet 195.118.254.45 22确认主机在线且端口开放。 - 若使用非默认SSH端口,需指定端口执行:
ssh-keyscan -H -p <自定义端口> 195.118.254.45 >> ~/.ssh/known_hosts
2. 目录或文件权限错误
~/.ssh目录和known_hosts文件权限过宽会被SSH系统拒绝写入,需确保权限符合要求:
- 检查
~/.ssh目录权限:执行ls -ld ~/.ssh,正确权限应为drwx------(700),不符合则修复:chmod 700 ~/.ssh - 检查
known_hosts文件权限:执行ls -l ~/.ssh/known_hosts,正确权限应为-rw-------(600);若文件不存在,先创建再设权限:touch ~/.ssh/known_hosts && chmod 600 ~/.ssh/known_hosts
3. 命令错误被追加操作掩盖
直接追加到文件会隐藏命令的错误输出,建议先单独执行ssh-keyscan -H 195.118.254.45,查看是否有Connection refused或Timeout这类错误提示。
- 若命令能正常输出密钥,可改用分步写入避免权限问题:
ssh-keyscan -H 195.118.254.45 > temp_key && cat temp_key >> ~/.ssh/known_hosts && rm temp_key
4. 路径解析异常
部分shell环境下~可能无法正确解析为当前用户主目录,可替换为绝对路径执行,例如Linux用户:ssh-keyscan -H 195.118.254.45 >> /home/你的用户名/.ssh/known_hosts
内容的提问来源于stack exchange,提问作者peace_love
相关产品推荐
相关产品推荐

