无公网IP及公私钥,本地SSH连接AWS私有EC2实例方法咨询
本地SSH连接无公网IP且无密钥的AWS EC2实例方案
方法一:通过SSM Session Manager建立隧道+配置自定义密钥
- 连接实例并添加自己的SSH公钥
- 用SSM Manager成功连接到目标EC2实例后,在实例内执行:
- 若用户目录下无
.ssh文件夹,创建并设置权限:mkdir -p ~/.ssh && chmod 700 ~/.ssh - 编辑
~/.ssh/authorized_keys文件,粘贴本地生成的SSH公钥内容(本地生成密钥对命令:ssh-keygen -t ed25519 -f ~/.ssh/my-ec2-key,公钥位于~/.ssh/my-ec2-key.pub) - 设置文件权限:
chmod 600 ~/.ssh/authorized_keys
- 若用户目录下无
- 用SSM Manager成功连接到目标EC2实例后,在实例内执行:
- 建立本地端口转发隧道
- 在本地终端执行SSM端口转发命令,将本地端口(如2222)映射到EC2实例的22端口:
aws ssm start-session --target <你的EC2实例ID> --document-name AWS-StartPortForwardingSession --parameters '{"portNumber":["22"], "localPortNumber":["2222"]}' - 保持该终端窗口运行,不要关闭
- 在本地终端执行SSM端口转发命令,将本地端口(如2222)映射到EC2实例的22端口:
- 本地SSH连接
- 新开本地终端,用自己的私钥连接本地转发端口:
ssh -i ~/.ssh/my-ec2-key <实例用户名>@localhost -p 2222 - 注意:实例用户名根据系统调整,比如Amazon Linux用
ec2-user,Ubuntu用ubuntu
- 新开本地终端,用自己的私钥连接本地转发端口:
方法二:利用EC2 Instance Connect Endpoint直接SSH连接
此方法无需提前在实例存储公钥,依赖EC2 Instance Connect的临时密钥推送功能:
- 准备本地密钥对
- 若无本地密钥对,执行
ssh-keygen -t ed25519 -f ~/.ssh/my-ec2-key生成
- 若无本地密钥对,执行
- 推送公钥到实例(临时有效)
- 本地执行命令推送公钥,有效期60秒:
aws ec2-instance-connect send-ssh-public-key --instance-id <你的EC2实例ID> --availability-zone <实例所在可用区> --instance-os-user <实例用户名> --ssh-public-key file://~/.ssh/my-ec2-key.pub
- 本地执行命令推送公钥,有效期60秒:
- 通过Endpoint建立SSH连接
- 用AWS CLI代理命令直接连接:
ssh -i ~/.ssh/my-ec2-key -o ProxyCommand="aws ec2-instance-connect open-tunnel --instance-id <你的EC2实例ID> --local-port %p" <实例用户名>@<EC2实例私有IP> - 或通过Endpoint DNS作为跳板连接:
ssh -i ~/.ssh/my-ec2-key -J <实例用户名>@<EC2 Instance Connect Endpoint DNS> <实例用户名>@<EC2实例私有IP> - 注意:确保EC2 Instance Connect Endpoint的安全组允许本地IP的SSH(22端口)流量,目标EC2实例的安全组允许来自Endpoint所在安全组的SSH流量
- 用AWS CLI代理命令直接连接:
权限说明
- 操作SSM功能时,你的IAM账号需具备
ssm:StartSession等权限,可附加AmazonSSMFullAccess策略(或自定义精细策略) - 操作EC2 Instance Connect功能时,需具备
ec2-instance-connect:SendSSHPublicKey、ec2-instance-connect:OpenTunnel等权限
内容的提问来源于stack exchange,提问作者EnergeticBlue
相关产品推荐
相关产品推荐

