🎬 HoRain云小助手:个人主页
🔥 个人专栏: 《Linux 系列教程》《c语言教程》
⛺️生活的理想,就是为了理想的生活!
⛳️ 推荐
前些天发现了一个超棒的服务器购买网站,性价比超高,大内存超划算!忍不住分享一下给大家。点击跳转到网站。
专栏介绍
专栏名称 | 专栏介绍 |
本专栏主要撰写C干货内容和编程技巧,让大家从底层了解C,把更多的知识由抽象到简单通俗易懂。 | |
本专栏主要是注重从底层来给大家一步步剖析网络协议的奥秘,一起解密网络协议在运行中协议的基本运行机制! | |
全面深入解析 docker 容器,从基础到进阶,涵盖原理、操作、实践案例,助您精通 docker。 | |
本专栏主要撰写Linux干货内容,从基础到进阶,知识由抽象到简单通俗易懂,帮你从新手小白到扫地僧。 | |
本专栏着重撰写Python相关的干货内容与编程技巧,助力大家从底层去认识Python,将更多复杂的知识由抽象转化为简单易懂的内容。 | |
本专栏主要是发布一些考试和练习题库(涵盖软考、HCIE、HRCE、CCNA等) |
目录
当使用 git clone
、git push
或直接测试 SSH 连接 GitHub(如 ssh -T git@github.com
)时,遇到 Connection closed by remote host
错误,可能是由网络配置、SSH 密钥问题或 GitHub 服务限制导致。以下是逐步排查和解决方法:
1. 检查网络连通性
确保你的网络能正常访问 GitHub 的 SSH 端口(默认 22
端口):
# 测试 GitHub 的 SSH 端口是否可达
telnet github.com 22
# 或使用更现代的工具
nc -zv github.com 22
- 若不可达:可能是防火墙、代理或 ISP 屏蔽了端口。尝试以下方法:
- 关闭 VPN/代理:某些 VPN 或代理会干扰 SSH 连接。
- 更换网络环境:例如切换到手机热点。
- 使用 HTTPS 替代 SSH:临时使用
git clone https://github.com/...
。
2. 验证 SSH 密钥配置
SSH 密钥未正确配置是常见原因。
(1) 检查公钥是否添加到 GitHub
-
查看本地公钥:
cat ~/.ssh/id_rsa.pub
确保输出内容与 GitHub 账户中设置的 SSH Keys 完全一致(路径:
Settings -> SSH and GPG Keys
)。 -
若未添加:
- 生成新密钥(如果不存在):
ssh-keygen -t ed25519 -C "your_email@example.com"
- 将公钥
~/.ssh/id_ed25519.pub
的内容粘贴到 GitHub 的 SSH Keys 页面。
- 生成新密钥(如果不存在):
(2) 检查私钥权限
私钥文件权限必须为 600
,.ssh
目录权限为 700
:
chmod 700 ~/.ssh
chmod 600 ~/.ssh/id_*
3. 使用 SSH 调试模式
通过 -v
参数查看详细连接日志,定位失败原因:
ssh -vT git@github.com
观察输出中关键错误信息:
-
示例错误 1:
no matching host key type found
Unable to negotiate with xx.xx.xx.xx port 22: no matching host key type found.
解决方法:在
~/.ssh/config
中指定兼容的密钥类型:Host github.com Hostname ssh.github.com Port 443 User git PubkeyAcceptedKeyTypes +ssh-rsa HostKeyAlgorithms +ssh-rsa
-
示例错误 2:
Permission denied (publickey)
debug1: Authentications that can continue: publickey debug1: No more authentication methods to try. git@github.com: Permission denied (publickey).
解决方法:确认公钥已正确添加到 GitHub,且使用
ssh-agent
管理密钥:eval "$(ssh-agent -s)" ssh-add ~/.ssh/id_ed25519
4. 尝试备用端口(443)
如果 22
端口被屏蔽,可使用 GitHub 的 HTTPS 端口 443
进行 SSH 连接:
ssh -T -p 443 git@ssh.github.com
若成功,需永久配置 ~/.ssh/config
:
Host github.com
Hostname ssh.github.com
Port 443
User git
5. 检查防火墙或代理设置
-
系统防火墙:临时关闭防火墙测试:
# CentOS sudo systemctl stop firewalld # Ubuntu sudo ufw disable
-
代理配置:若使用代理,确保 Git 和 SSH 的代理设置正确:
# 取消 Git 代理设置 git config --global --unset http.proxy git config --global --unset https.proxy # 取消 SSH 代理(检查 ~/.ssh/config 或环境变量) unset SSH_AUTH_SOCK
6. 更新 SSH 客户端或使用旧版协议
较新的 OpenSSH 版本可能禁用不安全的算法,而旧服务器可能不兼容。尝试:
-
启用旧版算法(临时):
ssh -o HostKeyAlgorithms=+ssh-rsa -o PubkeyAcceptedKeyTypes=+ssh-rsa -T git@github.com
-
更新 OpenSSH:
# Ubuntu/Debian sudo apt update && sudo apt upgrade openssh-client # CentOS sudo yum update openssh-clients
7. 检查 GitHub 服务状态
访问 GitHub Status 确认 SSH 服务是否正常。若 GitHub 出现故障,需等待其恢复。
8. 其他可能性
- IP 被 GitHub 限制:频繁连接失败可能导致临时封禁,更换 IP 或等待解除。
- 本地 DNS 问题:尝试使用
8.8.8.8
作为 DNS 服务器:sudo echo "nameserver 8.8.8.8" >> /etc/resolv.conf
最终验证
修复后,运行以下命令测试连接:
ssh -T git@github.com
成功时会返回:
Hi username! You've successfully authenticated, but GitHub does not provide shell access.
附:SSH 连接流程图解
❤️❤️❤️本人水平有限,如有纰漏,欢迎各位大佬评论批评指正!😄😄😄
💘💘💘如果觉得这篇文对你有帮助的话,也请给个点赞、收藏下吧,非常感谢!👍 👍 👍
🔥🔥🔥Stay Hungry Stay Foolish 道阻且长,行则将至,让我们一起加油吧!🌙🌙🌙