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

GitLab CI建立SSH连接报错Permission denied (publickey,password)如何解决

问题修复方案

你出现Permission denied (publickey,password)报错的核心原因是SSH公钥配置位置错误,其次CI脚本存在不规范的地方,完整修复步骤如下:

核心错误点

  • 你生成的SSH公钥错误存放到了GitLab用户SSH密钥库,实际上应该存到目标VPS的授权密钥文件中:SSH登录逻辑是本地(GitLab CI运行环境)持有私钥,远程主机(VPS)持有对应公钥,公钥需要写入VPS对应用户的~/.ssh/authorized_keys文件。

修复步骤

1. 修正VPS端公钥配置

  • 登录你的VPS,切换到CI要登录的user用户
  • 把你之前生成的公钥内容追加到~/.ssh/authorized_keys文件中
  • 调整VPS上的文件权限避免权限拦截:
chmod 700 ~/.ssh
chmod 600 ~/.ssh/authorized_keys

2. 修正GitLab CI变量配置

  • 进入GitLab仓库 > Settings > CI/CD > Variables,找到SSH_PRIVATE_KEY变量
  • 确认变量没有勾选「Protect variable」选项,确认变量值是完整的私钥内容,包括开头的-----BEGIN OPENSSH PRIVATE KEY-----和结尾的-----END OPENSSH PRIVATE KEY-----整段内容,不要有多余换行或空格。

3. 优化CI脚本(原有脚本冗余且存在风险)

把你的CI脚本替换为如下版本,注意替换实际的VPS IP和用户名:

before_script:
  # 安装ssh客户端
  - 'which ssh-agent || ( apk update && apk add openssh-client )'
  # 启动ssh-agent
  - eval $(ssh-agent -s)
  # 直接注入私钥不需要写入临时文件,避免泄露风险
  - echo "$SSH_PRIVATE_KEY" | tr -d '\r' | ssh-add -
  # 创建ssh目录配置权限
  - mkdir -p ~/.ssh
  - chmod 700 ~/.ssh
  # 写入VPS主机公钥到已知主机,替换为你的VPS真实IP
  - ssh-keyscan -t rsa 你的VPS真实IP >> ~/.ssh/known_hosts
  - chmod 644 ~/.ssh/known_hosts

script:
  # 测试ssh连接,也可以替换为实际的部署命令
  - ssh -o StrictHostKeyChecking=no user@你的VPS真实IP "echo 连接成功"

兜底排查方案

如果还是报错,可以在ssh命令前加-v参数输出详细调试日志,定位具体错误原因:

ssh -v user@你的VPS真实IP

常见额外错误场景:

  • VPS的sshd配置禁用了公钥认证,检查/etc/ssh/sshd_config中PubkeyAuthentication是否为yes
  • VPS安全组/防火墙没有开放22端口给GitLab CI的出口IP
  • CI运行环境不是Alpine镜像,换apt包管理器安装openssh-client即可

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.05 23:06:03