如何通过AWS EC2 Instance Connect转发Ansible请求至私有实例
解决方案:通过EC2 Instance Connect+Ansible实现堡垒机转发到私有实例
这个需求完全可行,以下是具体实现方法:
一、修正SSH命令实现直接链式连接
你当前的命令仅建立了到堡垒机的连接,要转发到私有实例,需要在堡垒机上通过nc(netcat)做二次转发,正确的SSH命令如下:
ssh -i .secrets/secret-key.pem \ -o ProxyCommand="aws ec2-instance-connect open-tunnel --instance-id i-04011022cbfc124f6 nc %h %p" \ user@<私有实例的私有IP或内部DNS>
解释:aws ec2-instance-connect open-tunnel先建立到堡垒机的加密隧道,随后通过堡垒机上的nc命令,将本地SSH流量转发到私有实例的22端口。
二、配置Ansible实现自动转发
要让Ansible自动通过堡垒机执行任务,可通过以下两种方式配置:
方式1:在Inventory文件中定义变量
编辑你的Ansible Inventory(比如hosts.ini),添加私有实例的连接参数:
[private_instances] i-09e745ed42f686fdb ansible_host=<私有实例私有IP> ansible_user=user ansible_ssh_private_key_file=.secrets/secret-key.pem [private_instances:vars] ansible_ssh_common_args='-o ProxyCommand="aws ec2-instance-connect open-tunnel --instance-id i-04011022cbfc124f6 nc %h %p"'
方式2:修改Ansible全局配置
编辑ansible.cfg文件,添加SSH连接代理配置:
[ssh_connection] ssh_args = -o ProxyCommand="aws ec2-instance-connect open-tunnel --instance-id i-04011022cbfc124f6 nc %h %p" private_key_file = .secrets/secret-key.pem
关键注意事项
- 确保堡垒机已安装
nc工具:根据系统不同,执行sudo yum install nc(RHEL/CentOS)或sudo apt install netcat-openbsd(Ubuntu/Debian) - 私有实例的安全组需允许堡垒机的私有IP访问22端口
- 堡垒机的IAM角色需包含
ec2-instance-connect:OpenTunnel权限,同时本地AWS CLI已配置好对应权限
内容的提问来源于stack exchange,提问作者Ptipiak
相关产品推荐
相关产品推荐

