Git拉取失败443最终解决办法
Git拉取失败443最终解决办法
00 前言
使用Github DeskTop可以拉取, 而SourceTree拉取报443错误. Git命令行同样无法拉取, 报443连接错误.
01 处理方法
最根本的原因是: Github的账号和密码验证服务器没有走梯子. 当然我们可以用全局代理配置的方式来强制使用梯子, 但始终会遇到有时可以验证有时无法验证的情况.
最稳定的解决方式是采用ssh验证的方式绕过验证, 可以稳定的拉取和提交. 但使用SourceTree的Putty生成密钥, 会出现本地计算出的结果和Github计算出的结果不一致的情况, 所以必须使用Git自身来生成密钥.
x00 生成新 SSH 密钥
生成新的 SSH 密钥并将其添加到 ssh-agent - GitHub 文档
打开Git Bash。
粘贴以下文本,将示例中使用的电子邮件替换为你自己的 GitHub 电子邮件地址。
1
ssh-keygen -t ed25519 -C "your_email@example.com"
x01 将 SSH 密钥添加到 ssh-agent
在向 ssh 代理添加新的 SSH 密钥以管理您的密钥之前,您应该检查现有 SSH 密钥并生成新的 SSH 密钥。
如果已安装 GitHub Desktop,可使用它克隆存储库,而无需处理 SSH 密钥。
在新的_管理员提升_终端窗口(PowerShell 或 CMD)中,确保 ssh-agent 正在运行。 可以使用“使用 SSH 密钥密码”中的“自动启动 ssh agent”说明,或者手动启动它:
1
eval $(ssh-agent -s)
x010 在 Git for Windows 上自动启动 ssh-agent
在C:\Users\[username]目录下建立一个.profile文件, 将以下内容粘贴复制到文件中. 下一次Gitbash启动会自动将ssh-agent启动
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
env=~/.ssh/agent.env
agent_load_env () { test -f "$env" && . "$env" >| /dev/null ; }
agent_start () {
(umask 077; ssh-agent >| "$env")
. "$env" >| /dev/null ; }
agent_load_env
# agent_run_state: 0=agent running w/ key; 1=agent w/o key; 2=agent not running
agent_run_state=$(ssh-add -l >| /dev/null 2>&1; echo $?)
if [ ! "$SSH\_AUTH\_SOCK" ] || [ $agent_run_state = 2 ]; then
agent_start
ssh-add
elif [ "$SSH\_AUTH\_SOCK" ] && [ $agent_run_state = 1 ]; then
ssh-add
fi
unset env
- 将 SSH 私钥添加到
ssh-agent。 如果使用其他名称创建了密钥或要添加具有其他名称的现有密钥,请将命令中的 ided25519 替换为私钥文件的名称。或者直接进入到C:\Users\[username]\.ssh目录下直接在Gitbash中运行ssh-add命令, 即可向ssh-agent中添加SSH私钥.
1
2
3
ssh-add /c/Users/YOU/.ssh/id_ed25519
//或者
ssh-add /c/Users/YOU/.ssh/id_rsa
- 将 SSH 公钥添加到 GitHub 上的帐户。 有关详细信息,请参阅“新增 SSH 密钥到 GitHub 帐户”。
x02 使用SSH方式拉取仓库
此时, 使用SSH方式拉取仓库, 即可顺利的拉取提交. 注意, 使用Github DeaskTop, 无法配置私钥目录, 那么私钥必须储存在默认位置C:\Users\[username]\.ssh目录下, 并且名字必须为id_rsa, 公钥名字必须为id_rsa.pub, 这样才可以被识别. 使用SourceTree则可以方便的在工具->选项->一般->SSH客户端配置条目, 选择OpenSSH客户端, 并指定私钥.
02 其他命令
测试Github是否可以ssh连通
1
2
3
4
5
6
ssh -vT git@ssh.github.com //测试ssh是否可连
ssh -vT -p 443 git@ssh.github.com //测试443端口是否可连
ipconfig /flushdns //请除DNS缓存
nslookup github.com 8.8.8.8 //查询github.com的ip地址
ssh-add -l //查看已经配置的密钥
ssh-add -D 密钥文件路径 //删除已有密钥
参考网页
Github-Git工程拉取443错误 | 【RoanYiu】
坑:ssh: connect to host github.com port 22: Connection refused - 知乎 (zhihu.com)
ssh 连接报错:debug1: expecting SSH2_MSG_KEX_ECDH_REPLY-CSDN博客
ssh 登录 expecting SSH2_MSG_KEX_ECDH_REPLY 错误 - SegmentFault 思否