我的实验室中有一台 cisco 交换机,因为它们最初配置了 telnet 连接,所以我想将其用于 ansible 的初始配置(SSH 访问、主机名、域...等)。
我正在尝试使用这个模块: https://docs.ansible.com/ansible/latest/collections/ansible/netcommon/telnet_module.html#parameters
这是我当前的剧本,但它没有按预期工作:
- name: Initial access with Telnet
connection: local
gather_facts: false
hosts: wired
tasks:
- name: set SSH with telnet connection # Configure SSH access to the netowrk devices
ansible.netcommon.telnet:
port: 14038
password: "mainpass"
send_newline: yes
prompts:
- '[>]'
commands:
- enable
当我运行此剧本时,我在 CLI 上没有得到任何信息,并且它会一直保持这种状态,直到我终止它:
sumaia@main-srv:~/ansible$ ansible-playbook init.yaml
PLAY [Initial access with Telnet] ***********************************************************************************************************************************************************************************************
TASK [set SSH with telnet connection] *******************************************************************************************************************************************************************************************
^C [ERROR]: User interrupted execution
sumaia@main-srv:~/ansible$
我用 putty 验证了 telnet 访问,它有效:
!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
To log in to this device, use the following password/credentials:
enable password mainpass
!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
9300>en
Password:
9300#
当我启动 telnet 会话时,我需要按 Enter 键然后启用才能输入密码,不确定这将如何反映在剧本中。
答案1
我想你会发现开关在显示 MOTD 横幅之前等待回车,因此它永远不会发送 ansible 正在寻找的提示,我发现解决此问题的唯一方法是将 send_carriage_return 参数添加到 ansible 的分叉版本.netcommon.telnet 模块。