解决克隆GitHub代码时连接超时的问题
问题描述
在使用Git尝试克隆GitHub代码仓库到本地时(此前正常),遇到了以下错误:
ssh: connect to host github.com port 22: Connection timed out
Please make sure you have the correct access rights
and the repository exists.
通过执行 ssh -T git@github.com
测试SSH连接,同样出现端口22连接超时的问题。
解决方案
步骤1:检查和修改SSH配置文件
-
找到或创建
.ssh
目录:
在终端中执行以下命令打开.ssh
文件夹:open ~/.ssh
如果该文件夹不存在,表示之前没有安装过SSH且未配置SSH密钥,请参考Github配置SSH密钥。由于本文不是初次配置SSH,因此
~/.ssh
默认存在 -
创建并编辑
config
文件:
使用文本编辑器(如TextEdit或VS Code)创建一个名为config
的文件(无后缀),并在其中添加以下内容:Host github.com User YourEmail # 替换为你的GitHub邮箱 Hostname ssh.github.com PreferredAuthentications publickey IdentityFile ~/.ssh/id_rsa Port 443
以上这段配置的作用是:
- 指定 GitHub 的 SSH 入口点:通过
ssh.github.com
和端口 443 连接。 - 使用公钥认证:确保连接安全且无需输入密码。
- 关联你的私钥文件:用于验证身份。
步骤2:验证配置
-
保存文件后,再次执行以下命令测试连接:
ssh -T git@github.com
-
如果出现提示信息:
The authenticity of host '[ssh.github.com]:443 ([20.205.243.166]:443)' can't be established. RSA key fingerprint is SHA256:... Are you sure you want to continue connecting (yes/no)?
输入
yes
并按回车键。 -
成功验证后,会显示:
Hi [YourUsername]! You've successfully authenticated, but GitHub does not provide shell access.
验证Git是否正常工作
经过以上步骤配置后,再次尝试克隆GitHub上的代码仓库,已经成功。
总结
如果你在克隆或者上传GitHub代码仓库碰到问题时,可以检查以下几点:
- 确保你的 GitHub 账号已经添加了对应的公钥。
- 确保
~/.ssh/id_rsa
文件存在(如果不存在,请重新生成 SSH 密钥对)。 - 确保网络环境允许通过端口 443 连接。
拓展
SSH Config配置文件中每条指令的详细解释:
1. Host github.com
- 作用:指定这条配置仅适用于目标主机名是
github.com
的连接。 - 含义:当使用
git clone
或其他 Git 操作连接到 GitHub 时,SSH 客户端会自动加载这一段配置。
2. User YourEmail
- 作用:指定在连接 GitHub 时使用的用户名(这里实际上是你的 GitHub 邮箱地址)。
- 含义:GitHub 使用 SSH 密钥进行身份验证,默认情况下需要将你的邮箱地址作为标识符。
- 注意:你需要将
YourEmail
替换为你的实际 GitHub 登录邮箱。
3. Hostname ssh.github.com
- 作用:指定连接的目标主机名实际上是
ssh.github.com
,而不是直接连接到github.com
。 - 含义:GitHub 提供了一个专门用于 SSH 连接的入口点
ssh.github.com
,通过这个地址可以更稳定地进行 SSH 操作。
4. PreferredAuthentications publickey
- 作用:指定使用公钥认证(Public Key Authentication)作为身份验证方式。
- 含义:
- 这是 GitHub 推荐的认证方式。
- 表示在连接时,SSH 客户端会尝试使用本地存储的私钥(
id_rsa
或其他密钥文件)来验证你的身份。
5. IdentityFile ~/.ssh/id_rsa
- 作用:指定用于认证的私钥文件路径。
- 含义:
~/.ssh/id_rsa
是默认的 SSH 私钥文件路径,通常在初次配置 SSH 密钥时自动生成。- 如果你使用了其他密钥文件(如
id_ed25519
),需要将路径替换为实际的密钥文件名。
6. Port 443
- 作用:指定连接 GitHub 的端口号为 443。
- 含义:
- 默认情况下,SSH 使用端口 22 进行通信。
- 由于部分网络环境(如公司或学校)可能限制了对端口 22 的访问,GitHub 提供了通过端口 443 连接的方案。
- 端口 443 是 HTTPs 的默认端口,通常不会被防火墙拦截,因此可以避免连接超时的问题。
作者信息:
- 微信公众号:密码应用技术实战
- 博客园首页:https://www.cnblogs.com/informatics
- GitHub地址:https://github.com/warm3snow