Skip to content

🚨 GitHub SSH 连接失败解决方案(密码错误 / Permission denied) 最好的解决办法还是修复DNS(源头(本机、路由器、交换机)解决不了就本地解决,一下方法)

错误信息示例:

Permission denied, please try again.
ssh用不了,强行跳至https才会要账号密码

❓ 问题原因

这种情况通常出现在以下几种情况之一:

  • /etc/hosts 中错误地将 github.com 指向了 127.0.0.1::1(本机),导致 SSH 实际连接的是自己
  • GitHub 远程 IP 变化,而 SSH 的 known_hosts 中记录了旧的公钥,触发了“主机密钥不匹配”警告
  • SSH 公钥没有正确添加到 GitHub
  • 本地仓库使用的是 HTTPS 或密钥未加载

✅ 解决步骤(推荐操作顺序)

1. 检查并修复 /etc/hosts

bash
vim /etc/hosts

➡️ 添加或更新如下内容(可通过 ping github.com 或在线 DNS 工具获取 IP):

bash
20.205.243.166 github.com

🔍 说明:确保系统将 github.com 正确解析为 GitHub 的实际 IP,而不是本地地址 ::1


2. 确认 SSH 能连接 GitHub

bash
ssh -T git@github.com

➡️ 成功会输出如下内容:

bash
Hi your-username! You've successfully authenticated, but GitHub does not provide shell access.

🔍 说明:这是 GitHub 给你的 SSH 欢迎提示,说明连接和认证都成功了。


3. 清除旧的 SSH 主机密钥记录

bash
sed -i '4d' /root/.ssh/known_hosts

或者使用更保险的方式(推荐):

bash
ssh-keygen -R github.com

🔍 说明:当 GitHub 的 IP 或主机密钥变更时,SSH 会报 REMOTE HOST IDENTIFICATION HAS CHANGED 错,这步可以清理掉旧记录。


4. 重新生成 SSH 公钥

bash
ssh-keygen -t rsa -b 4096 -C "1451592168@qq.com"

一路回车即可(默认保存在 ~/.ssh/id_rsa

🔍 说明:这一步会生成一对新的私钥和公钥文件:

  • 私钥:~/.ssh/id_rsa
  • 公钥:~/.ssh/id_rsa.pub

5. 将生成的公钥添加到 GitHub

  1. 登录 https://github.com
  2. 点击右上角头像 → Settings
  3. 左侧点击 SSH and GPG keys
  4. 点击 New SSH key
  5. 填写标题,将 ~/.ssh/id_rsa.pub 内容复制粘贴进去
bash
cat ~/.ssh/id_rsa.pub

🔍 说明:GitHub 必须信任你的公钥,才能使用 SSH 无密码访问。


🚧 为什么这个问题会“突然出现”?

常见原因如下:

  • 网络环境改变:比如你从公司切换到家庭网络,DNS 结果不同。
  • 使用内网穿透或本地代理:可能误将 github.com 解析到本地或拦截地址(例如 127.0.0.1)。
  • GitHub 更换服务器或 IP:GitHub 不定期会更换负载均衡后的 IP,导致之前 known_hosts 中记录的公钥失效。
  • 系统自动篡改 hosts(某些脚本/安全软件):也可能是你系统中某脚本或工具修改了 /etc/hosts 文件。

📌 附:常用检测命令

检查 GitHub 解析 IP 是否正确

bash
getent hosts github.com

➡️ 正常应为类似 20.x.x.x github.com,不要是 127.0.0.1::1


查看当前仓库远程地址

bash
git remote -v

确保使用的是:

git@github.com:your-username/your-repo.git

而不是:

https://github.com/your-username/your-repo.git