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

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}

排查步骤及解决思路

  1. 核对服务器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已失效
  2. 验证密钥文件可用性
    即便路径正确,仍需检查:

    • 密钥文件权限是否为600(执行chmod 600 /home/ec2-user/pem/safety.pem),权限过宽会被SSH拒绝
    • ansible navigator和ansible-playbook是否以同一用户执行?不同用户可能无法读取该路径下的密钥文件
    • 尝试将密钥移至当前用户的.ssh目录下测试
  3. 确认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"
  4. 单独测试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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.04 00:56:02