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

GitLab CI从环境变量加载SSH密钥时遇libcrypto错误

GitLab CI中加载SSH密钥时出现"error in libcrypto"或"Invalid format"的解决方案

核心问题

你遇到的报错根本原因不是OpenSSL版本问题,而是SSH密钥文件的格式被破坏:
当你用echo "${SSH_PRIVATE_KEY}" > ~/.ssh/id_rsa时,bash不会解析变量里的\n转义字符,导致生成的id_rsa文件里全是 literal 的\n字符串,而非真实的换行符,这直接导致ssh-keygen/ssh-add无法识别密钥格式,进而触发"error in libcrypto"或"Invalid format"错误。

修复方案

方法1:用printf解析转义换行

把写入密钥的echo命令替换为printf,它会自动解析变量中的\n为真实换行:

# 替换原来的 echo "${SSH_PRIVATE_KEY}" > ~/.ssh/id_rsa
printf "%b" "${SSH_PRIVATE_KEY}" > ~/.ssh/id_rsa

方法2:调整GitLab变量的存储方式

在GitLab项目的变量设置中,将SSH_PRIVATE_KEY的内容直接粘贴为多行文本(不要手动添加\n转义符),此时直接用echo就能正确写入换行:

echo "${SSH_PRIVATE_KEY}" > ~/.ssh/id_rsa

修正后的完整before_script示例

before_script:
  - 'command -v ssh-agent >/dev/null || ( apt-get update -y && apt-get install openssh-client openssl libssl-dev -y )'
  - eval $(ssh-agent -s)
  - mkdir -p ~/.ssh
  - chmod 700 ~/.ssh  # 目录权限必须是700
  - printf "%b" "${SSH_PRIVATE_KEY}" > ~/.ssh/id_rsa
  - chmod 600 ~/.ssh/id_rsa  # 密钥文件权限必须是600或400
  - ssh-keygen -y -f ~/.ssh/id_rsa > ~/.ssh/id_rsa.pub
  - ssh-add ~/.ssh/id_rsa  # 加载密钥到agent

额外注意事项

  • 确保GitLab变量SSH_PRIVATE_KEY的类型设置为"变量"(如果选"文件",则直接用cp "$SSH_PRIVATE_KEY" ~/.ssh/id_rsa即可)
  • 密钥文件和目录的权限必须严格控制:目录~/.ssh权限为700,密钥文件id_rsa为600,否则ssh会拒绝加载

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.15 06:10:39