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
相关产品推荐
相关产品推荐

