■ansibleでCisco機器の情報(sh run)を取得してみる。 $ lsb_release -d Description: Debian GNU/Linux 10 (buster) $ sudo apt-get install sshpass $ sudo pip --proxy=192.168.100.200:8080 install ansible $ ansible --version ansible 2.9.5 config file = None configured module search path = [u'/home/labunix/.ansible/plugins/modules', u'/usr/share/ansible/plugins/modules'] ansible python module location = /usr/local/lib/python2.7/dist-packages/ansible executable location = /usr/local/bin/ansible python version = 2.7.16 (default, Oct 10 2019, 22:02:15) [GCC 8.3.0] ■インベントリファイルの作成は公式サイトを参照する。 Ansible Network Examples https://docs.ansible.com/ansible/latest/network/user_guide/network_best_practices_2.5.html $ mkdir ansible $ cd ansible/ $ cat inventory_file [cisco] IOS1 ansible_host=192.168.0.1 [cisco:vars] ansible_become=yes ansible_become_method=enable ansible_become_pass=cisco ansible_ssh_user=admin ansible_ssh_pass=admin ansible_connection=network_cli ansible_network_os=ios [all:vars] ansible_python_interpreter=/usr/bin/python3 $ ansible cisco -i inventory_file -m ping IOS1 | SUCCESS => { "changed": false, "ping": "pong" } ■モジュールも公式サイトを参考。 ios_command – Run commands on remote devices running Cisco IOS https://docs.ansible.com/ansible/latest/modules/ios_command_module.html#ios-command-module $ find /usr/local/lib/python2.7/dist-packages/ansible/modules/ -type f -name "*.py" | grep ios_command /usr/local/lib/python2.7/dist-packages/ansible/modules/network/ios/ios_command.py $ ansible cisco -i inventory_file -m ios_command -a "commands='show run | sec line'" IOS1 | SUCCESS => { "changed": false, "stdout": [ "line con 0\n exec-timeout 0 0\n privilege level 15\n logging synchronous\nline aux 0\n exec-timeout 0 0\n privilege level 15\n logging synchronous\nline vty 0 4\n login local\n transport input ssh" ], "stdout_lines": [ [ "line con 0", " exec-timeout 0 0", " privilege level 15", " logging synchronous", "line aux 0", " exec-timeout 0 0", " privilege level 15", " logging synchronous", "line vty 0 4", " login local", " transport input ssh" ] ] } $ cat get-run.yml --- - hosts: cisco gather_facts: no tasks: - name: show run ios_command: commands: - show run register: result $ ansible-playbook -i inventory_file get-run.yml PLAY [cisco] ************************************************************************************************************************** TASK [show run] *********************************************************************************************************************** ok: [IOS1] PLAY RECAP **************************************************************************************************************************** IOS1 : ok=1 changed=0 unreachable=0 failed=0 skipped=0 rescued=0 ignored=0 ■sh runを取り出す $ ansible-playbook -i inventory_file show-run.yml > show-run.yml.log $ awk '/^ /' show-run.yml.log | xargs echo | sed 's/, /\n/g' $ awk '/^ "/{gsub("^ \"|\",","",$0);print $0}' show-run.yml.log | lsec ^line vty line vty 0 4 login local transport input ssh ! ■lsecコマンド [https://github.com/labunix/lsec/blob/master/lsec]