使用Ansible连接Cisco永久沙盒时SSH连接失败求助
错误提示显示Ansible尝试将inventory_hostname当作字面主机名解析,而非替换为实际的IP/FQDN,这说明Ansible在获取目标主机地址时出现了配置异常。以下是具体排查和解决步骤:
检查Ansible配置文件
查看当前工作目录、~/.ansible.cfg或/etc/ansible/ansible.cfg,确认是否存在remote_addr参数的错误设置。如果配置了remote_addr = inventory_hostname,会导致Ansible直接使用该字符串作为主机地址,无法解析。解决方法:注释或删除该参数。显式指定inventory中的
ansible_host
在hosts文件中为每个主机显式设置ansible_host变量,确保Ansible能正确获取目标地址,同时移除变量值的多余单引号(ini格式无需额外引号):[iosxe] 131.226.217.143 ansible_host=131.226.217.143 [iosxr] sandbox-iosxr-1.cisco.com ansible_host=sandbox-iosxr-1.cisco.com [iosxe:vars] ansible_network_os=ios ansible_user=admin ansible_ssh_pass=C1sco12345 [iosxr:vars] ansible_network_os=iosxr ansible_user=admin ansible_ssh_pass=C1sco12345安装SSH密码登录依赖
确保系统安装了sshpass(Ansible用密码登录SSH的必要依赖):sudo apt update && sudo apt install sshpass升级Ansible版本
旧版本Ansible的network_cli插件可能存在兼容性问题,建议升级到2.10及以上版本:sudo apt update && sudo apt upgrade ansible或用pip升级:
pip install --upgrade ansible测试单主机连接
用单主机测试缩小问题范围,比如测试IOS-XE设备:ansible -i hosts iosxe -m ios_command -a "commands='show ip route'" -u admin -k输入密码后观察是否能成功执行命令,若成功则说明playbook可能存在其他格式问题。
修复playbook的local_action格式
playbook中local_action的content部分使用逗号会生成列表格式,建议改为字符串拼接,确保输出符合预期:- local_action: module: copy content: "{{ inventory_hostname ~ ': ' ~ ('Failed with message: ' ~ ios_output.msg if ios_output.failed else 'Success: ' ~ ios_output.stdout_lines) }}" dest: "./{{ inventory_hostname }}.txt"
内容的提问来源于stack exchange,提问作者chun xu

