一、问题
无法进行clone项目和其他Git操作。执行检测连接命令 ssh -T git@github,com
报错
ssh:connect to host github.com port 22: Connection timed out
即:连接22端口超时
涉及到的文件
:
C:\Users\JIACHENGER.ssh\config
C:\Users\JIACHENGER.ssh\github_id_rsa
C:\Users\JIACHENGER.ssh\github_id_rsa.pub
C:\Users\JIACHENGER\.ssh\known_hosts
生成SSH连接日志
host文件
C:\Windows\System32\drivers\etc\hosts
IP
和域名
的本地映射文件
,只要在本机中查到了指定的域名
,就不会继续去DNS(域名系统)
中继续查找。
Windows设置本地DNS域名解析hosts文件配置
配置SSH公私钥可参考我这篇
:GitHub&Gitee&Gitlab&极狐(JihuLab)同时生成并配置和检测不同SSH公私钥详细过程
二、解决问题
2.1 ssh:connect to host github.com port 22: Connection timed out
//详细连接过程,-v表示verbose
ssh -vT git@github.com
或者
ssh -Tvvv git@github.com//nslookup是域名解析工具,8.8.8.8是Google的DNS服务器地址
nslookup github.com 8.8.8.8//使用本机已经设置好的DNS服务器进行域名解析
nslookup github.com
这里::1
是IPV6的localhost地址
,127.0.0.1
是IPV4的localhost地址
。这里基本可以认为是DNS域名解析出了问题
,导致GitHub的域名被解析成了本地localhost的ip地址
,导致无法连接上GitHub。
2.2 kex_exchange_identification: Connection closed by remote host
此时又出现了一个问题
:
kex_exchange_identification: Connection closed by remote host
Connection closed by ::1 port 22
将C:\Users\JIACHENGER\.ssh\known_hosts
备份,后将known_hosts
的内容清空
,再重新执行检测连接命令
ssh -T git@github,com
,这样做偶尔可以连接成功
,但过了一会儿还是会报同样的错误
。
我同时配置SSH公私钥的除了GitHub以外
的其他平台(Gitee&Gitlab&极狐(JihuLab))
都可以重新正常连接(过程中需要输入yes确认
,表示确认添加主机到可信任列表
,本机在之前第一次生成SSH公私钥的时候,没有配置访问密码
),并且在C:\Users\JIACHENGER\.ssh\known_hosts
中生成连接日志
,如下图:
GitHub&Gitee&Gitlab&极狐(JihuLab)同时生成并配置和检测不同SSH公私钥详细过程
2.3 排除端口
C:\Users\JIACHENGER\.ssh\config
中,若config中没有指定端口,默认使用22端口,进行SSH连接。
使用443端口(默认情况)config配置如下:
注意
:GitHub端口 443 的主机名Hostname
为 ssh.github.com
,而不是 github.com
。
# github
# ssh -T git@github.com
Port 443
#Port 22
Host github.com
Hostname ssh.github.com
PreferredAuthentications publickey
IdentityFile ~/.ssh/github_id_rsa
使用22端口(默认情况,不配置也是使用22端口)config配置如下:
# github
# ssh -T git@github.com
#Port 443
Port 22
Host github.com
Hostname github.com
PreferredAuthentications publickey
IdentityFile ~/.ssh/github_id_rsa
仍然还会报同样的错误
,说明大概率和端口没有关系:
2.4 在hosts中手动配置GitHub域名映射解决问题
在host文件
C:\Windows\System32\drivers\etc\hosts中手动配置GitHub域名映射
,在文件末尾
处增加一行 140.82.113.4 github.com
。此处的域名github.com
和C:\Users\JIACHENGER\.ssh\config
文件中GitHub配置的Hostname
值一致,均为github.com
。
# github
# ssh -T git@github.com
#Port 443
#注意:GitHub端口 443 的主机名Hostname为 ssh.github.com,而不是 github.com。
#Port 22 此处注释,默认也使用22端口
Host github.com
Hostname github.com
PreferredAuthentications publickey
IdentityFile ~/.ssh/github_id_rsa
IP
和域名
的本地映射文件
,只要在本机中查到了指定的域名
,就不会继续去DNS(域名系统)
中继续查找。
参考:Windows设置本地DNS域名解析hosts文件配置
# Added by Docker Desktop
192.168.1.14 host.docker.internal
192.168.1.14 gateway.docker.internal
# To allow the same kube context to work on the host and the container:
127.0.0.1 kubernetes.docker.internal
# End of section#2023-9-19 19:08:03 配置
#解决ssh:connect to host github.com port 22: Connection timed out等问题
#在hosts中手动配置GitHub域名映射140.82.113.4 github.com
在C:\Windows\System32\drivers\etc\hosts中
手动配置GitHub域名映射使用时,同时不需要在C:\Users\JIACHENGER\.ssh\config
文件中配置端口,默认使用22端口
,
如下
:
# github
# ssh -T git@github.com
#Port 443
#Port 22
Host github.com
HostName github.com
PreferredAuthentications publickey
IdentityFile ~/.ssh/github_id_rsa
如果配置了端口
,就会报下面的错误:
在hosts中手动配置GitHub域名映射后检测GitHub连接
(config中不配置端口,默认使用22端口),成功连接
:
$ ssh -T git@github.com
Hi DJCKING! You've successfully authenticated, but GitHub does not provide shell access.
三、参考
测试 SSH 连接
在 HTTPS 端口使用 SSH
GitHub&Gitee&Gitlab&极狐(JihuLab)同时生成并配置和检测不同SSH公私钥详细过程
Git问题:解决“ssh:connect to host github.com port 22: Connection timed out”
坑:ssh: connect to host github.com port 22: Connection refused
Windows设置本地DNS域名解析hosts文件配置
ssh远程登录报错:kex_exchange_identification: Connection closed by remote host