首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Ansible不会通过Telnet连接到模拟的网络设备

Ansible不会通过Telnet连接到模拟的网络设备
EN

Stack Overflow用户
提问于 2018-10-16 14:17:57
回答 1查看 1.2K关注 0票数 0

我正在尝试使用Ansible来启用SSH访问在EVE-NG环境中模拟的网络设备。我的目标是让一个可操作的剧本来配置SSH。EVE-NG的工作方式类似于GNS3,即通过特定端口通过telnet连接到设备。对于这个例子,假设我的EVE服务器位于192.168.1.10。EVE-NG将为该设备分配一个telnet端口,例如32899.如果我运行telnet 192.168.1.10 32899,我就能够像预期的那样访问设备。但是,如果我执行我的剧本,在telnet模块执行过程中,剧本似乎什么也不做。下面是我的剧本片段。

代码语言:javascript
复制
- 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状态的出站连接。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2018-10-19 15:22:18

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

代码语言:javascript
复制
- 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

或者您也可以使用脚本模块来保持您的游戏手册的整洁和整洁。

代码语言:javascript
复制
- name: Interact with system
  script: interact-with-system.expect
  args:
    executable: /usr/bin/expect
  changed_when: yes
  delegate_to: localhost

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

查看expect手册页或在线示例,看看您可以使用expect做些什么。这是相当强大的,但需要一些习惯。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/52837619

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档