ssh:连接主机端口22失败:连接超时。

3
在我的新工作电脑上安装了git,生成了我的ssh密钥并将其添加到gitlab后,我尝试克隆一个项目,但是出现以下错误:
ssh: connect to host <private-domain>.com port 22: Connection timed out
fatal: Could not read from remote repository.

Please make sure you have the correct access rights
and the repository exists.

我也尝试了使用带有详细选项的命令来测试SSH连接,结果如下:

$ ssh -Tvvv appgit@<private_domain>.com
OpenSSH_8.8p1, OpenSSL 1.1.1m  14 Dec 2021
debug1: Reading configuration data /etc/ssh/ssh_config
debug3: expanded UserKnownHostsFile '~/.ssh/known_hosts' -> '/h/.ssh/known_hosts'
debug3: expanded UserKnownHostsFile '~/.ssh/known_hosts2' -> '/h/.ssh/known_hosts2'
debug2: resolving "<private_domain>.com" port 22
debug3: resolve_host: lookup <private_domain>.com:22
debug3: ssh_connect_direct: entering
debug1: Connecting to <private_domain>.com [<serv.ip.add.ress>] port 22.
debug3: set_sock_tos: set socket 4 IP_TOS 0x48
debug1: connect to address <serv.ip.add.ress> port 22: Connection timed out
ssh: connect to host <private_domain>.com port 22: Connection timed out

我知道该域存在,ping <private-domain>.com 可以正常工作。我认为这不是代理问题,因为我没有使用http或https连接。 此答案 中的任何修复方法都没有改变任何东西。(我在Windows上)
我注意到如果我删除了~/.ssh文件夹中的密钥,我会得到同样的错误,这使我认为这是一个密钥问题而不是网络问题。如何确保git正在使用正确的密钥?
我尝试了ssh-keygen -lf ~/.ssh/id_rsa -E md5来查看指纹是否与gitlab上的指纹匹配(它是),但这只给出了文件夹中的指纹,而不一定是git使用的指纹。不过,Git-gui Help>Show SSH Key可以正确显示我的密钥。

“超时”错误通常意味着您正在拨打互联网电话并得到了死寂的回应:它没有发出忙音,您也没有听到“嘟-巴-哔!您所拨打的号码不存在”的提示音,也没有人说“喂”,只有……什么都没有。也许您的电话不起作用。也许电线被剪断了。有很多可能性。 - torek
ping 命令能够与相关名称通信是一个很有前途的迹象。使用您拥有的任何网络诊断工具来跟踪 ssh 数据包。在两端(您的端和服务器主机)都进行监视。然后逐步进入中间,查看问题出在哪里。 - torek
3个回答

3

请再次确认以下内容:

  • the remote server at least answer on port 22

      curl -v telnet://<private_domain>.com:22
    

(“connect to address <serv.ip.add.ress> port 22: Connection timed out”这部分提示说明远程服务器未监听或本地服务器阻止了任何出站SSH连接)

  • 远程GitLab服务器确实配置了名为appgit的技术账户:通常使用的默认账户是git
    以防万一,请再次使用ssh -Tvvv git@<private_domain>.com进行测试。

并确保您的密钥使用默认命名方案(如~/.ssh/id_rsa[.pub]


appgitgit的结果相同。奇怪的是,如果我从.ssh文件夹中删除我的密钥,我会得到相同的超时错误(没有“身份验证失败”或“ssh密钥未经授权”等错误)。这让我相信这是一个密钥问题,而不是网络问题。我如何知道git实际上正在使用正确的密钥在正确的文件夹中? - Teleporting Goat
2
@TeleportingGoat 这意味着Git甚至没有机会使用正确的密钥:网络问题阻止它联系远程端口22。 - VonC

1
我通过删除~/.ssh/known_hosts中的行来解决了这个问题。 删除与该地址相关的所有主机或ip。
www.####.com,xx.xx.xxx.xxx
10.15.##.## ssh-rsa AAAAB3NzaC1yc2EA

你用了什么命令? - arnold
很久以前,我记得那是一个简单普通的命令,但我现在已经想不出具体的命令了。 - gfan

-1

如果您正在使用运行在自定义域上的gitlab,可以执行以下操作:

  • 通过ssh-add在本地计算机上将您的git私钥添加到ssh-agent
  • 在当前用户主目录(~/.ssh/config)下添加以下配置文件,并根据需要更新参数

Host gitlab
    HostName mycustomgitlabdomain.com
    User my-git-user
    IdentityFile ~/.ssh/my_private_key

进一步检查以下事项:

  • 您是否能够使用任何用户在远程服务器上进行SSH连接?
  • 检查防火墙规则,是否有任何阻止操作?
  • 替换域名为IP地址进行访问
  • 检查远程服务器的SSH端口(可能已配置SSH服务以在不同端口上运行)

这与密钥无关,因为客户端和服务器甚至无法开始进行身份验证。 - chepner
@chepner,如果您查看评论,OP对git是否使用正确的密钥有疑问。如果他有任何问题,他可以检查密钥映射。这就是我在我的答案中解释的。除了密钥部分,我还提到了其他故障排除点。 :) - ras

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接