git clone 失败,信息为 kex_exchange_identification:读取:操作超时

git clone 失败,信息为 kex_exchange_identification:读取:操作超时

问题描述:

我当时正在使用公司网络,并尝试获取我自己的仓库,以获取 github.com 上仓库中的一些注释,但失败了。我尝试使用以下命令获取更详细的日志,并得到了以下详细信息:

 GIT_TRACE=true \
GIT_CURL_VERBOSE=true \
GIT_SSH_COMMAND="ssh -vvv" \
GIT_TRACE_PACK_ACCESS=true \
GIT_TRACE_PACKET=true \
GIT_TRACE_PACKFILE=true \
GIT_TRACE_PERFORMANCE=true \
GIT_TRACE_SETUP=true \
GIT_TRACE_SHALLOW=true \
git clone  [email protected]:albertjone/Boostnotes.git
11:00:34.976275 exec-cmd.c:139          trace: resolved executable path from Darwin stack: /Library/Developer/CommandLineTools/usr/bin/git
11:00:34.976973 exec-cmd.c:238          trace: resolved executable dir: /Library/Developer/CommandLineTools/usr/bin
11:00:34.977509 git.c:439               trace: built-in: git clone [email protected]:albertjone/Boostnotes.git
Cloning into 'Boostnotes'...
11:00:34.999871 run-command.c:663       trace: run_command: unset GIT_DIR; 'ssh -vvv' [email protected] 'git-upload-pack '\''albertjone/Boostnotes.git'\'''
OpenSSH_8.1p1, LibreSSL 2.7.3
debug1: Reading configuration data /Users/xiaojguan/.ssh/config
debug1: Reading configuration data /etc/ssh/ssh_config
debug1: /etc/ssh/ssh_config line 47: Applying options for *
debug1: Connecting to github.com port 22.
debug1: Connection established.
debug1: identity file /Users/xiaojguan/.ssh/id_rsa type 0
debug1: identity file /Users/xiaojguan/.ssh/id_rsa-cert type -1
debug1: identity file /Users/xiaojguan/.ssh/id_dsa type -1
debug1: identity file /Users/xiaojguan/.ssh/id_dsa-cert type -1
debug1: identity file /Users/xiaojguan/.ssh/id_ecdsa type -1
debug1: identity file /Users/xiaojguan/.ssh/id_ecdsa-cert type -1
debug1: identity file /Users/xiaojguan/.ssh/id_ed25519 type -1
debug1: identity file /Users/xiaojguan/.ssh/id_ed25519-cert type -1
debug1: identity file /Users/xiaojguan/.ssh/id_xmss type -1
debug1: identity file /Users/xiaojguan/.ssh/id_xmss-cert type -1
debug1: Local version string SSH-2.0-OpenSSH_8.1
kex_exchange_identification: read: Operation timed out
fatal: Could not read from remote repository.

Please make sure you have the correct access rights
and the repository exists.
11:01:58.045282 trace.c:475             performance: 83.067792000 s: git command: /Library/Developer/CommandLineTools/usr/bin/git clone [email protected]:albertjone/Boostnotes.git

我做过的事

  • 我已经在 Google 上搜索了很多次,但似乎没有有用的答案。

  • 我已经检查过是否可以在 github.com 上 telnet 22

❯ telnet github.com 22
Trying 140.82.114.4...
Connected to github.com.
Escape character is '^]'.

询问

虽然用http协议运行是没问题的git clone,但是我有点固执,不知道是什么原因造成的,如何解决。

答案1

建立 SSH 连接时,双方要做的第一件事就是交换版本标识符,以便了解对方正在使用的 SSH 版本和可能的软件。就您而言,您能够建立连接,但服务器从未发送其版本标识符。这可能是因为您的网络上有一些 MITM 设备,它会监视所有连接,并且不让这些连接通过。

您会注意到,在我的系统上,当我通过端口 22 连接到 github.com 时,我会收到远程端的 SSH 横幅:

$ nc github.com 22 </dev/null
SSH-2.0-babeld-cc5efb01

SSH 和 TLS(HTTPS 中使用的安全协议)可以防止攻击者读取数据或篡改数据未被发现但它们无法阻止攻击者篡改数据根本攻击者仍然可以阻止建立连接或对其进行篡改,以致由于检测到篡改而中止连接。

在这种情况下,您公司的 MITM 设备就是攻击者,他们阻止了连接。您可以尝试使用 VPN 来解决这个问题,但如果您可以使用 HTTPS 来实现您的目标,您也可以这样做。至少,这不太可能给您带来麻烦。

相关内容