Gitlab CI/CD通过SSH连接AWS EC2 Linux服务器失败求助
问题分析与修复方案
核心问题定位
从SSH调试日志和GitLab CI配置中,可明确几个导致权限拒绝的关键原因:
- 密钥路径解析失败:SSH命令中用引号包裹
~/.ssh/id_rsa,导致Shell无法将~解析为用户主目录,SSH实际尝试使用Rifter-Test-Server.pem(系统默认查找的密钥)而非你指定的文件 - 密钥权限错误:给
.ssh/*设置700权限,而SSH要求私钥文件必须是600权限(仅所有者可读可写),权限过宽会被SSH直接拒绝 - 变量解析失效:配置中使用中文引号
“$SSH_PRIVATE_KEY”,导致GitLab CI无法正确解析环境变量,私钥内容未被写入目标文件 - 私钥写入不可靠:
echo -e处理带换行的私钥时可能丢失格式,导致密钥无效
修复后的GitLab CI配置
deploy: stage: deploy before_script: - mkdir -p ~/.ssh - chmod 700 ~/.ssh - printf "%s" "$SSH_PRIVATE_KEY" > ~/.ssh/id_rsa # 用printf可靠保留私钥换行格式 - chmod 600 ~/.ssh/id_rsa # 设置SSH要求的私钥权限 - ssh-keyscan $EC2_IPADDRESS >> ~/.ssh/known_hosts - chmod 644 ~/.ssh/known_hosts # known_hosts仅需所有者可读、其他用户可读 tags: - node script: - ssh -Tv -i ~/.ssh/id_rsa ec2-user@ec2-18-216-48-255.us-east-2.compute.amazonaws.com "ls -l; whoami"
额外验证项
- 确认
$SSH_PRIVATE_KEY已在GitLab项目Settings > CI/CD > Variables中正确配置,值为EC2密钥对的完整私钥(包含-----BEGIN RSA PRIVATE KEY-----和-----END RSA PRIVATE KEY-----首尾行) - 检查EC2实例安全组是否允许GitLab Runner所在IP的22端口入站访问
- 确认EC2实例
/home/ec2-user/.ssh/authorized_keys文件中包含对应密钥的公钥内容
内容的提问来源于stack exchange,提问作者zahid Devops
相关产品推荐
相关产品推荐

