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

Gitlab CI/CD通过SSH连接AWS EC2 Linux服务器失败求助

问题分析与修复方案

核心问题定位

从SSH调试日志和GitLab CI配置中,可明确几个导致权限拒绝的关键原因:

  1. 密钥路径解析失败:SSH命令中用引号包裹~/.ssh/id_rsa,导致Shell无法将~解析为用户主目录,SSH实际尝试使用Rifter-Test-Server.pem(系统默认查找的密钥)而非你指定的文件
  2. 密钥权限错误:给.ssh/*设置700权限,而SSH要求私钥文件必须是600权限(仅所有者可读可写),权限过宽会被SSH直接拒绝
  3. 变量解析失效:配置中使用中文引号“$SSH_PRIVATE_KEY”,导致GitLab CI无法正确解析环境变量,私钥内容未被写入目标文件
  4. 私钥写入不可靠: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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.06 11:25:23