使用Ansible动态inventory ec2.py无法SSH连接EC2私有IP的问题排查
问题诊断与解决方案
核心问题拆解
- SSH超时原因:你的Ansible控制节点不在EC2实例所在VPC的内网范围内,直接访问私有IP(10.0.1.205)存在网络连通性障碍——即便安全组开放了22端口,跨公网无法直接访问VPC私有IP段,因此出现连接超时。
- ProxyCommand配置后报错原因:AWS CLI v2是独立二进制包,并非以Python模块形式安装;而你的系统存在多Python版本(2.7.5、3.4、3.6),Ansible默认调用的Python环境(大概率是系统Python 2.7)找不到
awscli.clidriver模块,导致连接失败。
针对性解决方案
方案1:直接调用AWS CLI二进制路径(推荐)
绕过Python模块依赖,直接指定AWS CLI v2的绝对二进制路径配置ProxyCommand:
方式1:修改ansible.cfg全局配置
[ssh_connection] ssh_args = -o ProxyCommand="/usr/local/aws-cli/v2/current/bin/aws ec2-instance-connect open-tunnel --instance-id %h" private_key_file = /etc/my_key
方式2:在Playbook中指定主机变量
- hosts: all vars: ansible_ssh_common_args: '-o ProxyCommand="/usr/local/aws-cli/v2/current/bin/aws ec2-instance-connect open-tunnel --instance-id %h"' ansible_ssh_private_key_file: /etc/my_key
方案2:校准Ansible的Python解释器(仅适配AWS CLI v1)
若坚持使用Python模块调用方式(不推荐,因AWS CLI v1已停止维护),需确保Ansible使用的Python环境已安装AWS CLI v1:
- 用Python3.6安装AWS CLI v1:
pip3.6 install awscli - 在
ansible.cfg中指定解释器:
[defaults] interpreter_python = /usr/bin/python3.6
验证步骤
- 在控制节点执行以下命令,确认EC2 Instance Connect隧道可用:
/usr/local/aws-cli/v2/current/bin/aws ec2-instance-connect open-tunnel --instance-id i-0287a97b2579f44d3
- 检查控制节点IAM权限:确保执行Ansible的用户/角色拥有
ec2-instance-connect:OpenTunnel权限。
内容的提问来源于stack exchange,提问作者JBone
相关产品推荐
相关产品推荐

