Git密钥失效及SSH部分问题
SSH端口22拒绝连接
问题描述
1 | ssh: connect to host github.com port 22: Connection refused |
原因分析
此错误通常意味着:
- SSH服务(22端口)在目标服务器上未开启或不可达 -> 但GitHub的SSH服务是正常的,所以问题通常出在本地环境或网络。
- 网络(如公司网络、校园网、某些公共Wi-Fi)屏蔽了SSH协议(22端口)。
- 您的SSH密钥配置有误,或远程仓库地址配置错误。
进行测试
诊断网络连通性
在终端(Terminal)或命令提示符(CMD)中运行以下命令,检查您的网络是否能访问GitHub的SSH端口。
- 测试是否能连接到 github.com 的 22 端口
1 | ssh -T git@github.com -p 22 |
结果
1 | The authenticity of host 'ssh.github.com (20.205.243.160)' can't be established. |
- 测试是否能连接到 github.com 的 443 端口
1 | ssh -T git@github.com -p 443 |
结果
1 | Hi Winward-King! You've successfully authenticated, but GitHub does not provide shell access. |
- 如果是
长时间未连接仓库或重新更新测试SSH密钥后,会进行 GitHub 的公钥指纹匹配
1 | ED25519 key fingerprint is SHA256:+DiY3wvvV6TuJJhbpZisF/zLDA0zPMSvHdkr4UvCOqU. |
这是一个 SSH 连接过程中的标准安全验证提示,而非错误。它表明您的计算机首次尝试通过 443 端口连接到 ssh.github.com,因此无法自动验证该服务器的真实性。这是一项防止“中间人攻击”的关键安全机制。
GitHub 的公钥指纹匹配
- 核心安全要求:在系统询问
Are you sure you want to continue connecting (yes/no/[fingerprint])?时,切勿直接输入yes。您必须先核对屏幕上显示的指纹是否与官方公布的指纹一致。 - 如何安全验证:
- 核对指纹:屏幕显示的指纹是
SHA256:+DiY3wvvV6TuJJhbpZisF/zLDA0zPMSvHdkr4UvCOqU。您需要将此指纹与 GitHub 官方公布的 SSH 密钥指纹 进行比对。 - 查找官方指纹:请访问 GitHub 官方文档(例如,在
docs.github.com上搜索 “GitHub’s SSH key fingerprints”),找到其公布的ssh.github.com或相关服务的ED25519密钥指纹。
- 核对指纹:屏幕显示的指纹是
- 验证后的操作:
- 如果指纹完全一致:这证明您连接的是真实的 GitHub 服务器。请输入
yes并按回车确认。- 后续影响:此主机的密钥将被保存到您本地计算机的
~/.ssh/known_hosts文件中,此后连接将不再提示,除非服务器密钥变更。
- 后续影响:此主机的密钥将被保存到您本地计算机的
- 如果指纹不一致:请务必输入
no并终止连接。这可能存在安全风险,请检查网络环境并重新从官方渠道获取正确信息。
- 如果指纹完全一致:这证明您连接的是真实的 GitHub 服务器。请输入
解决方案
方案一:配置SSH通过HTTPS端口(443)连接(一劳永逸)
GitHub提供了一个备用SSH端口,通过443端口的HTTPS隧道来传输SSH数据,可以绕过对22端口的封锁。
编辑或创建SSH客户端配置文件
~/.ssh/config。ssh文件夹中新建一个config文件
1
touch config
添加以下配置:
请确保路径指向您实际的私钥文件
1
2
3
4
5
6
7Host github.com
Hostname ssh.github.com
Port 443
User git
IdentityFile ~/.ssh/id_rsa
TCPKeepAlive yes
IdentitiesOnly yes保存文件后,再次运行连接测试:
1
ssh -T git@github.com
Git密钥失效或更新
重新生成提交ssh密钥
1 由C:\Users\你的用户名\.ssh找到.ssh文件夹,删除该文件夹下所有文件
2 查看git全局配置是否正确 在任意位置git bash
1 | git config --list |
如果不正确,通过以下命令修改邮箱或用户名
1 | 修改用户名 |
3 修改本地ssh
1 | ssh-keygen -t rsa -C "xxxxx@gmail.com" |
一路回车,遇到y/n 键入y
4 打开C:\Users\你的用户名\.ssh\id_rsa.pub 复制该文件中的密钥内容
5 进入github,在settings中找到SSH and GPG keys
6 删除旧的ssh密钥,加入新的ssh密钥(new ssh key)
Bad owner or permissions
问题描述
1 | Bad owner or permissions on */.ssh/config |
原因分析
出现此问题的原因是VSCode为此文件中包含未知用户权限导致的。
常常出现在不同操作系统中访问系统文件留下的权限。
解决方案
右击选择“属性”->“安全”后,可以在“组或用户名”中看出多了一个未知用户(S-1-5开头的那个),只要将该用户删除即可。
本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来源 Winward King's Blog!
评论
