내 연구실에는 cisco 스위치가 있고 처음에는 텔넷 연결로 구성되었으므로 이를 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를 사용하여 텔넷 액세스를 확인했는데 작동했습니다.
!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
To log in to this device, use the following password/credentials:
enable password mainpass
!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
9300>en
Password:
9300#
텔넷 세션을 시작할 때 Enter 키를 누른 다음 비밀번호 입력을 활성화해야 합니다. 이것이 플레이북에 어떻게 반영될지는 잘 모르겠습니다.
답변1
스위치는 MOTD 배너를 표시하기 전에 캐리지 리턴을 기다리므로 ansible이 찾고 있는 프롬프트를 보내지 않습니다. 이 문제를 해결하기 위해 제가 찾은 유일한 방법은 send_carriage_return 매개변수를 ansible.netcommon.telnet 모듈의 분기 버전입니다.