Ansible将无法通过Telnet连接到模拟网络设备

时间:2018-10-16 14:17:57

标签: ansible telnet

我正在尝试使用Ansible启用对EVE-NG环境中模拟的网络设备的SSH访问。我的目标是为Ansible剧本配置SSH。 EVE-NG的工作方式类似于GNS3,因为您通过telnet通过特定端口连接到设备。对于此示例,假设我的EVE-NG服务器位于192.168.1.10。 EVE-NG将为该设备分配一个telnet端口,例如32899。如果运行telnet 192.168.1.10 32899,则可以按预期访问该设备。但是,如果执行我的剧本,则在telnet模块执行期间,该剧本似乎什么也不做。我的剧本的摘要如下。

- name: Configure new EVE-NG router
  hosts: new_devices:cisco
  gather_facts: no
  tasks:
    - debug:
        msg: '{{ansible_host}} {{ansible_port}}'
    - name: Setup domain information
      telnet:
        port: '{{ansible_port}}'
        prompts:
          - "[>|#]"
        command:
          - term length 0
          - en
          - conf t

使用ansible-playbook运行-vvv不会显示任何有用的信息。当Ansible执行时,netstat确实显示了ESTABLISHED状态的出站连接。

1 个答案:

答案 0 :(得分:0)

我将使用 shell 模块结合 / usr / bin / expect 作为可执行文件来解决此问题。这为您提供了与系统交互的更多灵活性,并使得可以在单独的日志文件中跟踪进度。

- name: Interact with system
  shell: |
    set timeout 120
    log_file {{ '~/logs/your_log_file.explog' }}

    spawn telnet {{ inventory_hostname }}

    expect "username: "
    send "{{ your_username }}\n"

    expect "password:"
    send "{{ your_password }}\n"

    expect "# "
    send "term length 0"

    expect "# "
    send "en"

    expect "# "
    send "conf -t"
  args:
    executable: /usr/bin/expect
  changed_when: yes
  delegate_to: localhost

或者您可以使用脚本模块来保持您的剧本整洁干净。

- name: Interact with system
  script: interact-with-system.expect
  args:
    executable: /usr/bin/expect
  changed_when: yes
  delegate_to: localhost

PS:如果您使用shebang,甚至不需要添加可执行文件。

查看Expect手册页或在线示例,以了解您可以对Expect做些什么。它功能强大,但需要一些习惯。