我正在尝试使用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
状态的出站连接。
答案 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做些什么。它功能强大,但需要一些习惯。