我有自动下拉并安装github存储库的服务器脚本。作为脚本的一部分,我ssh-keyscan -H github.com >> ~/.ssh/known_hosts
以 git 用户身份运行以在检出 repo 之前自动接受 github 的 RSA 密钥。
我已经在本地 vagrant 实例以及多台服务器上成功使用了相同的脚本。但是,在其中一台服务器上这是行不通的,因为ssh-keyscan -H github.com
不返回任何输出(我已经以 git 用户、我的个人用户和 root 用户的身份尝试过这个,并且命令的行为相同)。我可以ping github.com,所以不是连接问题;我还可以在同一网络中的另一台服务器上成功运行 ssh-keyscan。我已经尝试升级 SSH 以查看这是否可能是问题所在,但它已经在我的发行版 (CentOS 7) 的最新版本上。
从哪里开始解决这个问题?我已经尝试在 StackExchange 中搜索与“ssh-keyscan”相关的问题,但我还没有找到适合这个特定问题的任何内容。
小智 7
我遇到了同样的问题(没有给出输出),这是因为默认超时(5 秒)太短了。我通过使用 -T 标志解决了这个问题,该标志允许我设置自己的自定义超时(以秒为单位)。具有 240 秒超时和随机 IP 地址的说明性示例:
ssh-keyscan -T 240 52.213.86.118
Run Code Online (Sandbox Code Playgroud)
这对我来说听起来像是网络问题。
我要做的第一件事是尝试远程登录到端口 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
什么?netstat -an --tcp
,您是否看到几个处于 SYN_SENT 状态的 TCP 条目?如果是这样,这将表明网络层存在阻塞