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

通过CircleCI SSH连接AWS EC2是否需配置.pem文件及如何保障密钥安全

CircleCI 连接 AWS EC2 问题解决方案

1. SSH 连接失败修复

你当前的命令报错核心原因是:ssh -i 参数需要接收本地私钥文件的路径,而你直接传入了环境变量名,无法被SSH识别。
修复步骤如下:

  • 先确认你存到CircleCI环境变量的PEM内容完整,必须包含首尾的-----BEGIN RSA PRIVATE KEY-----、-----END RSA PRIVATE KEY-----标记,无多余换行或空格。
  • 在CircleCI的config.yml对应job的执行步骤中,先将环境变量中的私钥内容写入临时文件,修正权限后再发起连接,示例脚本如下:
# 写入私钥到临时文件
echo "$EC2_SSH_PRIVATE_KEY" > ~/ec2_private_key.pem
# 修正私钥权限(SSH强制要求私钥仅所有者可读可写)
chmod 600 ~/ec2_private_key.pem
# 发起SSH连接,添加参数跳过主机指纹校验(适配CI非交互场景)
ssh -o StrictHostKeyChecking=no -i ~/ec2_private_key.pem ubuntu@myinstance.compute.amazonaws.com
# 连接执行完操作后立即删除临时私钥文件
rm -f ~/ec2_private_key.pem

2. 私钥安全优化方案

CircleCI本身的环境变量是加密存储的,只要关闭项目公开权限、限制项目成员范围,基础安全性可以得到保障。如果需要更高等级的安全防护,可以采用以下方案:

  • 方案1:替换为AWS SSM Session Manager连接(最优,无需管理私钥)
    完全不用暴露SSH私钥,通过IAM权限控制访问权限。给CircleCI的OIDC身份绑定专用IAM角色,授予SSM会话访问权限后,直接通过AWS CLI发起连接,命令如下:
    aws ssm start-session --target 你的EC2实例ID
    
  • 方案2:加密私钥存储
    本地将PEM私钥用AES加密后存入代码仓库,解密密钥仅存在CircleCI环境变量中。流水线运行时临时解密使用,用完立即销毁私钥文件:
    本地加密命令示例:
    openssl enc -aes-256-cbc -salt -in ec2_key.pem -out ec2_key.pem.enc
    
    流水线解密使用命令示例:
    openssl enc -d -aes-256-cbc -in ./ec2_key.pem.enc -out ~/ec2_private_key.pem -k "$PRIVATE_KEY_DECRYPT_PWD"
    chmod 600 ~/ec2_private_key.pem
    # 后续SSH操作执行完成后删除私钥
    rm -f ~/ec2_private_key.pem
    
  • 方案3:缩小网络访问范围
    在EC2安全组中配置22端口的入站规则,仅允许CircleCI官方公布的出口IP段访问,即使私钥泄露也无法从其他IP建立连接。

内容的提问来源于stack exchange,提问作者sonphung.xf

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.25 09:06:10