我已经使用 github.com 很长时间了,但是我的 ISP 刚刚将我的家庭互联网切换到静态 IP,现在我无法通过 SSH 连接到 github。
SSH 会发生什么情况?
id_ed25519 密钥刚刚重新生成。SSH 刚刚停止:
$ ssh -T -F ~/.ssh/config [email protected] -vvv
OpenSSH_8.1p1, LibreSSL 2.7.3
debug1: Reading configuration data /Users/xxxx/.ssh/config
debug1: /Users/xxx/.ssh/config line 1: Applying options for *
debug1: Connecting to github.com port 22.
Wireshark 显示它根本没有收到任何返回数据包:
那么也许 SSH 不被允许?
也许吧!但我可以从同一个命令提示符顺利 ssh 到 AWS EC2 实例。完全没有问题。
我还尝试过什么?
我可以通过 HTTPS 使用 SSH。例如,这个...
ssh -T -p 443 [email protected]
...运行正常,我可以连接。但我需要知道为什么普通的 22 端口不再对我有用。
有什么改变?
我要求我的 ISP 为我分配一个静态 IP。他们做到了。成功了。来自我网络上设备的连接似乎来自他们分配的这个新静态 IP。
ssh 配置内容
Host *
AddKeysToAgent yes
UseKeychain yes
IdentityFile ~/.ssh/id_ed25519
另外还有额外的福利,
$ git config --list
credential.helper=osxkeychain
user.name=xxxx
[email protected]
core.autocrlf=input
答案1
使用 tcp traceroute
根据 Tero Kilkanen 的建议,我安装了 tcptraceroute,从而解决了问题。编辑:我想补充一下,我没有使用过,traceroute
因为我知道它使用 ICMP 协议,并且不一定以与我的 TCP SSH 数据包相同的方式路由。所以tcptraceroute
对我来说是新的,我认为它会非常有用!
1). 安装 tcptraceroute
这是在 Mac 上,所以我使用 homebrew 安装了建议的公式:formulae.brew.sh/formula/tcptraceroute:
$ brew install tcptraceroute
2). 运行 tcptraceroute
$ sudo tcptraceroute github.com 22
我附加了一个跟踪片段,显示它在 ISP 处停止:
6 bundle-ether10.win-core10.melbourne.telstra.net (203.50.11.123) 26.865 ms 26.183 ms 27.529 ms
7 bundle-ether2.fli-core10.adelaide.telstra.net (203.50.6.228) 34.738 ms 32.591 ms 37.021 ms
8 bundle-ether1.fli-edge901.adelaide.telstra.net (203.50.11.155) 33.344 ms 33.840 ms 32.964 ms
9 * * *
10 * * *
11 * * *
3). ISP解析
在给 ISP 打电话之前,我检查了账户设置。禁用默认家长控制就成功了 - ssh 到 github.com 的权限恢复了!
规则仅阻止了 youtube.com,但不起作用。ISP 在分配静态 IP 后重新启动连接,这似乎导致重新评估配置的家长控制规则。
不知道为什么允许使用 https 到 github.com 而不允许 ssh(甚至不知道为什么 github.com 被阻止),但我们这样做了 - 问题解决了。