我有一个服务器脚本,可以自动下载并安装 github 存储库。作为脚本的一部分,我ssh-keyscan -H github.com >> ~/.ssh/known_hosts
以 git 用户身份运行,以便在签出存储库之前自动接受 github 的 RSA 密钥。
我已经在本地 vagrant 实例以及多个服务器上成功使用了相同的脚本。但是,在其中一台服务器上,这不起作用,因为ssh-keyscan -H github.com
不会返回任何输出(我已以 git 用户、我的个人用户和 root 身份尝试过此操作,并且命令的行为相同)。我可以 ping 通 github.com,所以这不是连接问题;我还可以在同一网络中的另一台服务器上成功运行 ssh-keyscan 。我尝试升级 SSH,看看这是否是问题所在,但它已经是我的发行版的最新版本(CentOS 7)了。
从哪里开始解决此问题比较好?我尝试在 StackExchange 中搜索与“ssh-keyscan”相关的问题,但尚未找到适合此特定问题的任何内容。
答案1
我遇到了同样的问题(没有给出输出),这是因为默认超时(5 秒)太短。我通过使用 -T 标志解决了这个问题,它允许我设置自己的自定义超时(以秒为单位)。具有 240 秒超时和随机 IP 地址的说明性示例:
ssh-keyscan -T 240 52.213.86.118
答案2
ssh-keyscan -p <PORT> <IP>
如果您的 ssh 服务器未在默认端口上运行,请尝试运行
答案3
对我来说,这听起来确实像是网络问题。
我要做的第一件事是尝试通过端口 22 远程登录到各种 SSH 服务器,如下所示:
$ telnet local-git-server 22
其次是:
$ telnet github.com 22
运行此命令时,您应该会看到与以下类似的输出:
Escape character is '^]'. SSH-2.0-OpenSSH_6.0p1 Debian-4+deb7u2
这是一个很好的指示,ssh
无需任何防火墙限制即可允许。
- 最终的结果是什么
ssh-keyscan
? - 如果有的话,它打印了什么?
- telnet 是否挂起几秒钟?您是否收到连接被拒绝或连接被拒绝的响应?
- 如果运行,
netstat -an --tcp
您是否会看到多个处于 SYN_SENT 状态的 TCP 条目?如果是这样,则表明网络层存在阻塞
答案4
我跑步的时候也遇到了类似的问题ssh-keyscan github.com
。我尝试添加自定义-T
标志来增加超时,但没有任何输出。因此,为了调试问题,我ssh -vvv github.com
在端口 22 上连接到 github.com。它-vvv
提供了一些调试信息,最终命令运行到Operation timed out
.因此,可能有一些解决方案。您可以询问您的 ISP 提供商是否启用了端口 22,或者像我的情况一样,这是由第三方软件(Teamviewer)引起的。卸载它解决了问题。这是一个对我有帮助的解决方案,但就您而言,可能还涉及其他问题。