Ansible Inventory变量使用异常:SSH连接失败求助排查
关于Ansible Inventory配置及SSH连接问题的排查
问题场景
刚接触Ansible学习,在Inventory中配置变量后进行实验,遇到SSH连接异常:
- 使用
ansible navigator运行时两台服务器均报错 - 使用
ansible-playbook运行时server2执行成功,server1仍显示不可达
配置文件
Inventory文件
[newserver] server1 ansible_host=54.208.201.158 server2 ansible_host=3.80.57.225 [newserver:vars] ansible_user=ec2-user ansible_ssh_private_key_file=/home/ec2-user/pem/safety.pem
Playbook文件(reprctce.yml)
--- - name: install nginx ( play name ) hosts: newserver become: yes tasks: - name: install nginx ( task name ) yum: name: nginx state: latest - name: install node ( task name ) yum: name: nodejs state: latest - name: starting nginx (task name) service: name: nginx state: started
报错信息
使用ansible navigator运行时的报错:
fatal: [server1]: UNREACHABLE! => {"changed": false, "msg": "Failed to connect to the host via ssh: no such identity: /home/ec2-user/pem/safety.pem: No such file or directory ec2-user@3.95.180.175: Permission denied (publickey,gssapi-keyex,gssapi-with-mic).", "unreachable": true} fatal: [server2]: UNREACHABLE! => {"changed": false, "msg": "Failed to connect to the host via ssh: no such identity: /home/ec2-user/pem/safety.pem: No such file or directory ec2-user@50.16.148.14: Permission denied (publickey,gssapi-keyex,gssapi-with-mic).", "unreachable": true}
排查步骤及解决思路
核对服务器IP一致性
报错中显示的目标IP(3.95.180.175、50.16.148.14)和Inventory配置的54.208.201.158、3.80.57.225不匹配,需确认:- 是否存在本地hosts文件映射或DNS缓存覆盖了Inventory配置的IP
- 目标EC2实例是否有弹性IP变更,导致Inventory内的IP已失效
验证密钥文件可用性
即便路径正确,仍需检查:- 密钥文件权限是否为
600(执行chmod 600 /home/ec2-user/pem/safety.pem),权限过宽会被SSH拒绝 ansible navigator和ansible-playbook是否以同一用户执行?不同用户可能无法读取该路径下的密钥文件- 尝试将密钥移至当前用户的
.ssh目录下测试
- 密钥文件权限是否为
确认Inventory变量优先级
检查是否存在更高优先级变量覆盖当前配置:- 查看
host_vars或group_vars目录下是否有文件定义了冲突的ansible_ssh_private_key_file或ansible_user - 执行命令验证变量实际生效值:
ansible server1 -i [你的Inventory文件名] -m debug -a "var=ansible_ssh_private_key_file"
- 查看
单独测试SSH连通性
直接用SSH命令测试两台服务器,定位问题是否出在Ansible之外:ssh -i /home/ec2-user/pem/safety.pem ec2-user@54.208.201.158 ssh -i /home/ec2-user/pem/safety.pem ec2-user@3.80.57.225如果server1的SSH连接本身失败,优先排查EC2实例的安全组(是否开放22端口给控制机IP)、实例运行状态、密钥是否与实例匹配。
内容的提问来源于stack exchange,提问作者changembidar
相关产品推荐
相关产品推荐

