Linux服务器克隆新GitHub仓库遇证书及SSH连接问题求助
咱们一步步拆解你碰到的这几个Git克隆问题,每个问题的根源和解决办法都给你理得明明白白:
原因
这个错误的核心是你的Linux服务器CA证书库没信任新GitHub仓库的证书颁发机构(CA),要么是系统CA库过时,要么是仓库证书的链不完整,导致Git在验证证书时直接判定为不可信。
解决方案
优先方案:更新系统CA证书库(比关闭sslVerify安全得多)
根据你的服务器发行版执行对应命令:- Debian/Ubuntu系列:
sudo apt update && sudo apt install --reinstall ca-certificates - RHEL/CentOS/Rocky Linux系列:
sudo update-ca-trust extract
更新完成后再试HTTPS克隆,证书验证应该就能正常通过了。
- Debian/Ubuntu系列:
应急方案:临时关闭sslVerify(不推荐长期用)
如果只是临时测试,可以在克隆时加参数跳过验证:git clone https://githubxxxxx.com/group/myrepo.git --config http.sslVerify=false注意不要全局设置
http.sslVerify=false,会让所有Git HTTPS连接都跳过证书验证,存在安全风险。
原因
HTTPS协议下Git默认不会持久化保存你的账号密码,每次操作都要重新验证;而且私有仓库必须校验身份,所以会反复弹出输入框。
解决方案
配置Git凭据助手,让它自动保存并复用你的凭据:
- 先安装依赖工具:
- Debian/Ubuntu:
sudo apt install libsecret-1-0 libsecret-1-dev - RHEL/CentOS:
sudo yum install libsecret-devel
- Debian/Ubuntu:
- 编译安装Git凭据助手(如果系统没自带):
cd /usr/share/doc/git/contrib/credential/libsecret sudo make sudo cp git-credential-libsecret /usr/local/bin/ - 设置Git默认使用这个凭据助手:
之后再用HTTPS操作仓库,就不用反复输入账号密码了。git config --global credential.helper libsecret
git@githubxxxxx.com:group/myrepo.git格式成功 原因
这俩都是SSH协议,但底层连接逻辑有差异:
ssh://git@githubxxxxx.com/group/myrepo.git会直接调用系统默认的SSH配置,如果你的服务器SSH客户端有特殊设置(比如自定义端口、代理,或者域名解析错误),就会触发「ssh_exchange_identification: Connection closed by remote host」错误。- 而
git@githubxxxxx.com:group/myrepo.git是Git专属的SSH URL格式,它会优先读取Git的core.sshCommand配置,或者~/.ssh/config里针对githubxxxxx.com的专属规则——大概率你的服务器刚好有适配这个域名的SSH配置,所以能成功连接。
另外还有可能是服务器防火墙/安全组限制了SSH 22端口出站,但对githubxxxxx.com有特殊放行;或者ssh://格式默认用了错误的端口。
解决方案
方法1:检查并适配SSH配置
- 打开
~/.ssh/config看看是否有针对githubxxxxx.com的配置,比如:
如果有,那Host githubxxxxx.com HostName githubxxxxx.com User git IdentityFile ~/.ssh/你的密钥文件名 # 可能还有Port、ProxyCommand等特殊配置git@格式会自动匹配这个规则,而ssh://格式需要明确指定这些参数才能正常连接,比如改成:git clone ssh://git@githubxxxxx.com:端口号/group/myrepo.git
方法2:全局设置Git的SSH命令
强制所有Git SSH连接都用你指定的密钥和配置文件,这样两种格式都能正常工作:
git config --global core.sshCommand "ssh -i ~/.ssh/你的密钥文件名 -F ~/.ssh/config"
方法3:排查网络/防火墙问题
用命令排查端口连通性:
telnet githubxxxxx.com 22
如果不通,联系服务器管理员开放对应端口;还可以用ssh -v git@githubxxxxx.com查看连接的详细日志,精准定位连接被关闭的原因(比如密钥不匹配、服务器端拒绝等)。
内容的提问来源于stack exchange,提问作者Roberto Hernandez




