ssh connect to host github.com port 22 Connection refused
参考:https://iter01.com/688100.html
# 遭遇问题
Git push 到GitHub仓库时失败:
ssh: connect to host github.com port 22: Connection refused
1
# 查找原因
测试
ssh -T git@github.com
1
ssh -T user@host
命令通常用于测试连接情况。
详细日志(上面的命令加个选项-v
)
ssh -vT git@github.com
1
-v
表示verbose,會打出详细日志。-T
表示Disable pseudo-tty allocation,连接禁止分配伪终端(当用ssh或telnet等登录系统时,系统分配给我们的终端就是伪终端。)。
$ ssh -vT git@github.com
OpenSSH_9.0p1, OpenSSL 1.1.1o 3 May 2022
debug1: Reading configuration data /etc/ssh/ssh_config
debug1: Connecting to github.com [::1] port 22.
debug1: connect to address ::1 port 22: Connection refused
debug1: Connecting to github.com [127.0.0.1] port 22.
debug1: connect to address 127.0.0.1 port 22: Connection refused
ssh: connect to host github.com port 22: Connection refused
1
2
3
4
5
6
7
8
2
3
4
5
6
7
8
從上面的資訊馬上就發現了詭異的地方,連線github.com的地址居然是
::1
和127.0.0.1
。前者是IPV6的localhost地址,後者是IPV4的localhost地址。到這裡問題就很明確了,是DNS解析出問題了,導致github.com域名被解析成了localhost的ip地址,就自然連不上GitHub了。
Windows下執行
ipconfig /flushdns
清楚DNS快取後也沒用,最後修改hosts檔案,增加一條github.com的域名對映搞定。https://iter01.com/688100.html
# 解决方案
方案一:更换22
端口为443
方案二:在系统hosts
文件中添加IP和域名映射
如果使用了其中一个方案还存在某些问题的话,可以考虑两个方案可同时使用。
# 方案一 更换22
端口为443
在./ssh
下的config
文件(如无该文件则新建即可)中添加如下内容:
Host github.com
Hostname ssh.github.com
Port 443
1
2
3
2
3
# 方案二 在系统hosts
文件中添加IP和域名映射
查询 github.com
IP地址
nslookup github.com 8.8.8.8
1
8.8.8.8
是Google的DNS伺服器地址
或者使用https://www.ipaddress.com/网站查询IP地址
打开本机hosts
文件,追加一条映射:
140.82.114.3 github.com
1
Windows 的
hosts
文件在C:\Windows\System32\drivers\etc
路径下。
# 测试
ssh -T git@github.com
1
若得出如下结果,则成功解决该问题:
Hi JimFKppt! You've successfully authenticated, but GitHub does not provide shell access.
1
# github.com
DNS解析污染导致 SSH 无法连接到 GitHub
ssh: connect to host github.com port 22: Connection refused
1
DNS解析污染有两种可能的原因:
- DNS解析被运营商劫持
- 用了科学上网
编辑 (opens new window)
上次更新: 2022/12/03, 17:31:39