You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

ArgoCD通过SSH连接GitLab报错:handshake failed连接被重置

ArgoCD SSH连接私有GitLab仓库失败:handshake failed/连接重置问题

问题场景

尝试通过SSH将ArgoCD连接至私有GitLab仓库,已完成以下前置操作:

  • 生成SSH密钥对,将公钥添加至GitLab仓库的部署密钥或用户SSH密钥中
  • 在ArgoCD中配置了私钥与仓库地址git@gitlab.example.com:group/repo.git

测试连接时出现以下错误:

Unable to connect SSH repository: error testing repository connectivity:
unable to ls-remote HEAD on repository:
failed to list refs: ssh: handshake failed:
read tcp <argo-ip>:<port>-><gitlab-ip>:22: read: connection reset by peer

已尝试的操作:

  • 在argocd-cm的repositories配置中添加insecure: true
  • 在argocd-repo-server的Deployment环境变量中设置GIT_SSH_COMMAND="ssh -o StrictHostKeyChecking=no -o UserKnownHostsFile=/dev/null"
  • 更换不同密钥类型(RSA、OpenSSH、ED25519)

同一集群的其他Pod中执行以下命令可成功克隆仓库,说明网络连通性正常:

export GIT_SSH_COMMAND="ssh -i ~/.ssh/id_rsa -o StrictHostKeyChecking=no -o UserKnownHostsFile=/dev/null"
git clone git@gitlab.example.com:group/repo.git

排查与解决方案

1. 检查SSH密钥权限

ArgoCD repo-server容器中,私钥权限必须为600,否则SSH客户端会拒绝使用。如果通过Secret挂载密钥,可添加初始化容器调整权限:

# 修改argocd-repo-server的Deployment
initContainers:
- name: fix-key-perms
  image: alpine:latest
  command: ["sh", "-c", "chmod 600 /app/config/ssh/id_rsa"]
  volumeMounts:
  - name: ssh-key-secret
    mountPath: /app/config/ssh

同时确认ArgoCD配置中指定的私钥路径与实际挂载路径一致。

2. 验证ArgoCD仓库配置正确性

确保argocd-cm中仓库配置明确关联私钥Secret,示例:

data:
  repositories: |
    - url: git@gitlab.example.com:group/repo.git
      sshPrivateKeySecret:
        name: gitlab-ssh-key-secret
        key: id_rsa

注意:私钥必须是无密码加密的,ArgoCD不支持带密码的SSH密钥。

3. 检查GitLab端权限与日志

  • 确认GitLab中对应公钥的用户/部署密钥拥有仓库的读取权限(至少Guest)
  • 查看GitLab的SSH认证日志(Admin Area → Monitoring → Logs → Auth),排查是否有密钥验证失败记录
  • 确认GitLab的SSH端口22未被集群网络策略或外部防火墙拦截

4. 直接调试repo-server的SSH连接

进入argocd-repo-server Pod,手动执行命令排查:

# 进入repo-server Pod
kubectl exec -it $(kubectl get pods -n argocd -l app.kubernetes.io/name=argocd-repo-server -o name) -- bash
# 切换到argocd用户
su argocd
# 开启SSH调试模式测试连接
export GIT_SSH_COMMAND="ssh -i /app/config/ssh/id_rsa -o StrictHostKeyChecking=no -o UserKnownHostsFile=/dev/null -v"
git ls-remote git@gitlab.example.com:group/repo.git

通过调试日志(-v参数输出)定位具体失败原因,比如密钥不匹配、主机密钥问题等。

5. 升级ArgoCD版本

部分旧版本ArgoCD存在SSH协议兼容性问题,尝试升级至最新稳定版本(如v2.8及以上)。


内容的提问来源于stack exchange,提问作者parax

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.12 05:13:11