可以连接到思科路由器::密码消息会破坏连接吗?

可以连接到思科路由器::密码消息会破坏连接吗?

当我从 Ansible 服务器手动通过 SSH 连接到 Cisco 路由器时,我在命令行上看到以下内容:

me@ubuntu01:~/ansible$
me@ubuntu01:~/ansible$ ssh [email protected]
Password:
####################### Cisco Router 101 ########################
Hi, welcome to the company router!  Pls don't mess it up.
####################### Cisco Router 101 ########################


cisco101 line 388
% Password expiration warning.
cisco101#
cisco101#

遗憾的是,我无法重置该密码,所以我必须学会忍受“密码过期警告”消息。

我想使用 Ansible 访问此路由器。显然,通过 SSH 连接到路由器是可行的。以下是我的 POC 清单文件:

[routers]
10.10.10.101

[routers:vars]
ansible_network_os=ios
ansible_ssh_user=user01
ansible_ssh_password=password123

我的剧本是:

---
- hosts: routers
  vars:
    ansible_python_interpreter: auto

- tasks:
  - name: Gather only the config and default facts
    cisco.ios.ios_facts:
      gather_subset:
      - config

可惜:

me@ubuntu01:~/ansible$
me@ubuntu01:~/ansible$
me@ubuntu01:~/ansible$ ansible-playbook myPlaybook.yml -i /home/me/inventory.txt

PLAY [routers] **********************************************************************************************************

TASK [Gathering Facts] ********************************************************************************************************
Monday 10 April 2023  19:31:48 +0000 (0:00:00.061)       0:00:00.061 **********
[WARNING]: Ignoring timeout(10) for ansible.legacy.ios_facts
[WARNING]: Unhandled error in Python interpreter discovery for host 10.10.10.101: unexpected output from Python interpreter
discovery
fatal: [10.10.10.101]: FAILED! => changed=false
  ansible_facts: {}
  failed_modules:
    ansible.legacy.ios_facts:
      ansible_facts:
        discovered_interpreter_python: /usr/bin/python
      failed: true
      module_stderr: ''
      module_stdout: |-
        C
        ####################### Cisco Router 101 ########################
        Hi, welcome to the company router!  Pls don't mess it up.
        ####################### Cisco Router 101 ########################


        cisco101 line 388

        Line has invalid autocommand "/bin/sh -c '/usr/bin/python && sleep 0'"
      msg: |-
        MODULE FAILURE
        See stdout/stderr for the exact error
      rc: 0
      warnings:
      - Platform unknown on host 10.10.10.101 is using the discovered Python interpreter at /usr/bin/python, but future installation of another Python interpreter could change the meaning of that path. See https://docs.ansible.com/ansible/2.10/reference_appendices/interpreter_discovery.html for more information.
  msg: |-
    The following modules failed to execute: ansible.legacy.ios_facts

PLAY RECAP ********************************************************************************************************************
10.10.10.101             : ok=0    changed=0    unreachable=0    failed=1    skipped=0    rescued=0    ignored=0

Playbook run took 0 days, 0 hours, 0 minutes, 3 seconds
Monday 10 April 2023  19:31:52 +0000 (0:00:03.741)       0:00:03.802 **********
===============================================================================
Gathering Facts -------------------------------------------------------------------------------------------------------- 3.74s
me@ubuntu01:~/ansible$

在我进一步阐述之前:

  • 我的 Ubuntu 是 Ubuntu 18.04.5 LTS
  • 我的 Ansible 是版本 ansible 2.10.7(Python 版本 3.6.9)
  • 我的 Ansible-Playbook 是版本 2.10.7(Python 版本 3.6.9)
  • 路由器运行的是 Cisco IOS 版本 15.4(3)M3(不是 IOS XR)

好的:那么到底出了什么问题?我认为有两种可能:

(A) 我猜想,当我手动记录时看到的“密码过期警告”可能会使 Ansible 感到困惑。 (B) Cisco 路由器运行的是较低版本的 Python,导致 Ansible 出现故障。

据我所知,路由器没有运行任何版本的 Python。或者至少,我在路由器上找不到“显示 Python 版本”命令来验证。

我的直觉告诉我,问题出在 (A) 上。如果是这样,有什么方法可以教 Ansible 忽略“密码过期警告”消息吗?如果问题是 (B)...我该怎么办?谢谢

答案1

您尝试在网络设备上执行 Ansible,但由于该设备缺少标准 Linux 命令,更不用说 Python 解释器,因此失败。

为了解决这个问题,有一种特殊的连接类型,适用于依赖于 CLI 解析器而不是 Python 代码执行的网络设备。您尝试使用的 IOS 模块需要network_cli如下设置的连接类型:

 ansible_connection: ansible.netcommon.network_cli
 ansible_network_os: cisco.ios.ios
 ansible_become: yes
 ansible_become_method: enable

答案2

可以确认 ansible_(insert_variable) 后面的空格也修复了我的问题,并且解决了我变量中完整的 ansible.netcommon.network_cli 的问题

相关内容