GitLab中作为文件变量的SSH Key无法使用,求解决方案
解决GitLab CI/CD文件变量id_rsa无法用于SSH的问题
问题原因
GitLab的文件变量并非直接提供文件路径,而是将文件内容作为变量值存储。直接在ssh命令中使用$id_rsa会把私钥文本(开头是-----BEGIN)当成文件名,导致ssh找不到对应文件,同时命令参数被打乱,出现解析hostname错误。
修正后的流水线配置
需要先将变量中的私钥内容写入临时文件,再赋予正确权限后供ssh使用:
my_job: script: # 将文件变量内容写入临时文件 - echo "$id_rsa" > /tmp/id_rsa # 设置私钥文件权限(ssh要求必须是600,否则会拒绝使用) - chmod 600 /tmp/id_rsa # 使用临时文件作为身份文件执行ssh命令 - ssh -o StrictHostKeyChecking=no -i /tmp/id_rsa my_host # 可选:清理临时文件 - rm -f /tmp/id_rsa
额外注意事项
- 确认在GitLab CI/CD变量配置时,
id_rsa的类型是File,而非普通的Variable类型。 - 如果该变量是受保护变量,则运行流水线的分支必须是GitLab中设置的受保护分支,否则变量不会被注入到流水线中。
内容的提问来源于stack exchange,提问作者Mikal
相关产品推荐
相关产品推荐

