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

Gitlab CI中ssh-add加载SSH私钥报错的问题排查与解决

GitLab CI加载SSH私钥报错问题排查

我按照GitLab官方文档指引,将SSH私钥作为CI变量添加,并用以下命令在流水线中加载:

- eval $(ssh-agent -s)
- echo "$SSH_PRIVATE_KEY" | tr -d '\r' | ssh-add -

执行时出现错误:

Error loading key "(stdin)": incomplete message

我使用ssh-keygen -t rsa -b 2048生成密钥对,尝试了多种解决方法均无效:

  • 测试变量末尾有无空行两种情况
  • 将变量类型改为文件
  • 更换密钥生成参数(不同-t和-b值)
  • 先将私钥写入文件再加载
  • 修改编码方式
  • 编辑/etc/ssh/ssh_config并添加配置:
HostKeyAlgorithms +ssh-rsa
PubkeyAcceptedKeyTypes +ssh-rsa 

尝试过的无效命令:

echo "$SSH_PRIVATE_KEY" | tr -d '\r' | ssh-add - > /dev/null

echo "$SSH_PRIVATE_KEY" | base64 -d | ssh-add -

过程中还出现过另一错误:

Error loading key "(stdin)": error in libcrypto

临时解决方案

我未再将私钥作为CI变量,改用shell执行器,手动登录GitLab Runner主机,切换到gitlab-runner用户后建立SSH连接。对应的CI任务配置如下(需替换remote-server.de和user@remote-server.de):

job_back_end_deploy:
  stage: deploy
  #variables:
  #  CI_DEBUG_TRACE: "true"  # 取消注释可获取更详细控制台输出
  before_script:
  # 需提前手动在Gitlab Runner主机的gitlab-runner用户与目标服务器间建立SSH连接
  # -------------------------------------
  ## 切换到gitlab-runner用户
  # su - gitlab-runner
  ## 生成SSH密钥对
  # ssh-keygen -t rsa -b 2048
  ## 将公钥复制到目标服务器(需输入密码)
  # ssh-copy-id -p 222 -i /home/gitlab-runner/.ssh/id_rsa.pub user@remote-server.de
  # -----------------------------
  #
  # 验证SSH主机密钥
  - ssh-keyscan 'remote-server.de' >> ~/.ssh/known_hosts
  script:    
  - echo 'Copying files to remote server...'
  - scp -P 222 -r ./back_end/ user@remote-server.de:./public_html/back_end/   # 添加-v参数可查看更多输出
  tags:
    - visualization 

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.26 05:15:36