You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

Linux服务器克隆新GitHub仓库遇证书及SSH连接问题求助

咱们一步步拆解你碰到的这几个Git克隆问题,每个问题的根源和解决办法都给你理得明明白白:

问题1:HTTPS克隆报「Peer's certificate issuer has been marked as not trusted by the user」

原因

这个错误的核心是你的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克隆,证书验证应该就能正常通过了。

  • 应急方案:临时关闭sslVerify(不推荐长期用)
    如果只是临时测试,可以在克隆时加参数跳过验证:

    git clone https://githubxxxxx.com/group/myrepo.git --config http.sslVerify=false
    

    注意不要全局设置http.sslVerify=false,会让所有Git HTTPS连接都跳过证书验证,存在安全风险。

问题2:关闭sslVerify后仍需反复输入账号密码

原因

HTTPS协议下Git默认不会持久化保存你的账号密码,每次操作都要重新验证;而且私有仓库必须校验身份,所以会反复弹出输入框。

解决方案

配置Git凭据助手,让它自动保存并复用你的凭据:

  1. 先安装依赖工具:
    • Debian/Ubuntu:
      sudo apt install libsecret-1-0 libsecret-1-dev
      
    • RHEL/CentOS:
      sudo yum install libsecret-devel
      
  2. 编译安装Git凭据助手(如果系统没自带):
    cd /usr/share/doc/git/contrib/credential/libsecret
    sudo make
    sudo cp git-credential-libsecret /usr/local/bin/
    
  3. 设置Git默认使用这个凭据助手:
    git config --global credential.helper libsecret
    
    之后再用HTTPS操作仓库,就不用反复输入账号密码了。
问题3:SSH://格式克隆失败,但git@githubxxxxx.com:group/myrepo.git格式成功

原因

这俩都是SSH协议,但底层连接逻辑有差异:

  1. ssh://git@githubxxxxx.com/group/myrepo.git 会直接调用系统默认的SSH配置,如果你的服务器SSH客户端有特殊设置(比如自定义端口、代理,或者域名解析错误),就会触发「ssh_exchange_identification: Connection closed by remote host」错误。
  2. git@githubxxxxx.com:group/myrepo.git是Git专属的SSH URL格式,它会优先读取Git的core.sshCommand配置,或者~/.ssh/config里针对githubxxxxx.com的专属规则——大概率你的服务器刚好有适配这个域名的SSH配置,所以能成功连接。

另外还有可能是服务器防火墙/安全组限制了SSH 22端口出站,但对githubxxxxx.com有特殊放行;或者ssh://格式默认用了错误的端口。

解决方案

方法1:检查并适配SSH配置

  1. 打开~/.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

火山引擎 最新活动