Hello Ansible gurus, I am new to Ansible and have installed from Git source branch. I am not changing anything at this time. I am investigating ways to use Ansible with Mikrotik RouterOS (www.mt.lv or www.mikrotik.com). My test environment is a Ubuntu 18.xx linux box on a local area network. The two devices are on the same ethernet switch.
dev1@s5:~/TTLLC_ansible$ uname -a Linux s5 5.0.0-15-generic #16-Ubuntu SMP Mon May 6 17:41:33 UTC 2019 x86_64 x86_64 x86_64 GNU/Linux dev1@s5:~/TTLLC_ansible$ ansible --version 22073 1559065845.13968: starting run ansible 2.9.0.dev0 config file = /etc/ansible/ansible.cfg configured module search path = [u'/home/dev1/.ansible/plugins/modules', u'/usr/share/ansible/plugins/modules'] ansible python module location = /home/dev1/src/ansible/lib/ansible executable location = /home/dev1/src/ansible/bin/ansible python version = 2.7.16 (default, Apr 6 2019, 01:42:57) [GCC 8.3.0] dev1@s5:~/TTLLC_ansible$ I have SSH private-key and public-key setup to allow me to access the Mikrotik RouterOS session without an interactive password from the Ubuntu box. For now, I am testing DSA file private key/public key dev1@s5:~/.ssh$ ls -l total 16 -rw------- 1 dev1 dev1 1373 May 26 23:10 3101_dsa -rw-r--r-- 1 dev1 dev1 597 May 26 23:10 3101_dsa.pub dev1@s5:~/.ssh$ file * 3101_dsa: OpenSSH private key 3101_dsa.pub: OpenSSH DSA public key Here is the proof that SSH works from the command line. dev1@s5:~/TTLLC_ansible$ ssh -i ~/.ssh/3101_dsa [email protected] -p 22222 MMM MMM KKK TTTTTTTTTTT KKK MMMM MMMM KKK TTTTTTTTTTT KKK MMM MMMM MMM III KKK KKK RRRRRR OOOOOO TTT III KKK KKK MMM MM MMM III KKKKK RRR RRR OOO OOO TTT III KKKKK MMM MMM III KKK KKK RRRRRR OOO OOO TTT III KKK KKK MMM MMM III KKK KKK RRR RRR OOOOOO TTT III KKK KKK MikroTik RouterOS 6.43.2 (c) 1999-2018 http://www.mikrotik.com/ [?] Gives the list of available commands command [?] Gives help on the command and list of arguments [Tab] Completes the command/word. If the input is ambiguous, a second [Tab] gives possible options / Move up to base level .. Move up one level /command Use command at the base level Here is my problem (the full debug output is at the end of this message, sorry for the length) - Ansible reports the SSH module complains it is an Invalid key. The full traceback is: Traceback (most recent call last): File "/home/dev1/src/ansible/bin/ansible-connection", line 104, in start self.connection._connect() File "/home/dev1/src/ansible/lib/ansible/plugins/connection/network_cli.py", line 327, in _connect ssh = self.paramiko_conn._connect() File "/home/dev1/src/ansible/lib/ansible/plugins/connection/paramiko_ssh.py", line 245, in _connect self.ssh = SSH_CONNECTION_CACHE[cache_key] = self._connect_uncached() File "/home/dev1/src/ansible/lib/ansible/plugins/connection/paramiko_ssh.py", line 368, in _connect_uncached raise AnsibleConnectionFailure(msg) AnsibleConnectionFailure: Invalid key 22502 1559065909.68461: done running TaskExecutor() for 10.0.0.99/TASK: Gathering Facts [8851fb63-ee9d-cebc-7778-00000000000c] 22502 1559065909.68478: sending task result for task 8851fb63-ee9d-cebc-7778-00000000000c 22502 1559065909.68512: done sending task result for task 8851fb63-ee9d-cebc-7778-00000000000c 22502 1559065909.68518: WORKER PROCESS EXITING 22489 1559065909.68718: marking 10.0.0.99 as failed 22489 1559065909.68731: marking host 10.0.0.99 failed, current state: HOST STATE: block=0, task=0, rescue=0, always=0, run_state=ITERATING_SETUP, fail_state=FAILED_NONE, pending_setup=True, tasks child state? (None), rescue child state? (None), always child state? (None), did rescue? False, did start at task? False 22489 1559065909.68736: ^ failed state is now: HOST STATE: block=0, task=0, rescue=0, always=0, run_state=ITERATING_COMPLETE, fail_state=FAILED_SETUP, pending_setup=True, tasks child state? (None), rescue child state? (None), always child state? (None), did rescue? False, did start at task? False 22489 1559065909.68741: getting the next task for host 10.0.0.99 22489 1559065909.68746: host 10.0.0.99 is done iterating, returning fatal: [10.0.0.99]: FAILED! => { "msg": "Invalid key" } I would have assumed the following script would work - but it doesn't, what am I doing wrong - how am I messing up the key definition? dev1@s5:~/TTLLC_ansible$ cat doAnsible.sh #! /bin/bash # Specify the location for the log file export ANSIBLE_LOG_PATH=/tmp/foo # Enable Debug export ANSIBLE_DEBUG=True cat /dev/null > /tmp/foo # Run with 4*v for connection level verbosity ansible-playbook -u ttadmins -vvvv -i TTLLC_hosts ansibleRouterOS.yml YAML file dev1@s5:~/TTLLC_ansible$ cat ansibleRouterOS.yml --- # # Ansible Playbook for TTLLC RouterOS network management # xxxxxxxxxxxxxxxxxxxxx Mon 27 May 2019 09:26:20 AM EDT # - hosts: mikrotiks # debugger: on_failed tasks: - name: get uptime on mikrotik devices routeros_command: commands: /system resource print ... Test host file # stub inventory file for ansible [mikrotiks] 10.0.0.99 [mikrotiks:vars] ansible_ssh_private_key_file=/home/dev1/.ssh/3101_dsa ansible_connection=network_cli ansible_port=22222 ansible_user=ttadmins ansible_network_os=routeros I have experimented with moving the ansible_ssh_private_key_file definition to a lot of locations: YAML file, Hosts file, Vars section, command line definition .... Full debug output /tmp/foo dev1@s5:~/TTLLC_ansible$ cat /tmp/foo 2019-05-28 13:51:48,813 p=dev1 u=22489 | ansible-playbook 2.9.0.dev0 config file = /etc/ansible/ansible.cfg configured module search path = [u'/home/dev1/.ansible/plugins/modules', u'/usr/share/ansible/plugins/modules'] ansible python module location = /home/dev1/src/ansible/lib/ansible executable location = /home/dev1/src/ansible/bin/ansible-playbook python version = 2.7.16 (default, Apr 6 2019, 01:42:57) [GCC 8.3.0] 2019-05-28 13:51:48,814 p=dev1 u=22489 | Using /etc/ansible/ansible.cfg as config file 2019-05-28 13:51:48,814 p=dev1 u=22489 | setting up inventory plugins 2019-05-28 13:51:48,821 p=dev1 u=22489 | host_list declined parsing /home/dev1/TTLLC_ansible/TTLLC_hosts as it did not pass it's verify_file() method 2019-05-28 13:51:48,821 p=dev1 u=22489 | script declined parsing /home/dev1/TTLLC_ansible/TTLLC_hosts as it did not pass it's verify_file() method 2019-05-28 13:51:48,821 p=dev1 u=22489 | auto declined parsing /home/dev1/TTLLC_ansible/TTLLC_hosts as it did not pass it's verify_file() method 2019-05-28 13:51:48,848 p=dev1 u=22489 | Parsed /home/dev1/TTLLC_ansible/TTLLC_hosts inventory source with ini plugin 2019-05-28 13:51:49,034 p=dev1 u=22489 | Loading callback plugin default of type stdout, v2.0 from /home/dev1/src/ansible/lib/ansible/plugins/callback/default.pyc 2019-05-28 13:51:49,080 p=dev1 u=22489 | PLAYBOOK: ansibleRouterOS.yml ************************************************************************************************************************************************************ 2019-05-28 13:51:49,080 p=dev1 u=22489 | 1 plays in ansibleRouterOS.yml 2019-05-28 13:51:49,089 p=dev1 u=22489 | PLAY [mikrotiks] ************************************************************************************************************************************************************************* 2019-05-28 13:51:49,098 p=dev1 u=22489 | TASK [Gathering Facts] ******************************************************************************************************************************************************************* 2019-05-28 13:51:49,110 p=dev1 u=22502 | <10.0.0.99> attempting to start connection 2019-05-28 13:51:49,110 p=dev1 u=22502 | <10.0.0.99> using connection plugin network_cli 2019-05-28 13:51:49,421 p=dev1 u=22508 | <10.0.0.99> ESTABLISH PARAMIKO SSH CONNECTION FOR USER: ttadmins on PORT 22222 TO 10.0.0.99 2019-05-28 13:51:49,683 p=dev1 u=22502 | <10.0.0.99> local domain socket does not exist, starting it 2019-05-28 13:51:49,683 p=dev1 u=22502 | <10.0.0.99> control socket path is /home/dev1/.ansible/pc/8b253d558a 2019-05-28 13:51:49,683 p=dev1 u=22502 | <10.0.0.99> loaded cliconf plugin for network_os routeros 2019-05-28 13:51:49,683 p=dev1 u=22502 | network_os is set to routeros 2019-05-28 13:51:49,683 p=dev1 u=22502 | <10.0.0.99> 22503 1559065909.36878: trying /home/dev1/src/ansible/lib/ansible/plugins/connection 22503 1559065909.40077: Loaded config def from plugin (connection/ssh) 22503 1559065909.40087: Loading Connection 'ssh' from /home/dev1/src/ansible/lib/ansible/plugins/connection/ssh.py (found_in_cache=False, class_only=True) 2019-05-28 13:51:49,683 p=dev1 u=22502 | The full traceback is: Traceback (most recent call last): File "/home/dev1/src/ansible/bin/ansible-connection", line 104, in start self.connection._connect() File "/home/dev1/src/ansible/lib/ansible/plugins/connection/network_cli.py", line 327, in _connect ssh = self.paramiko_conn._connect() File "/home/dev1/src/ansible/lib/ansible/plugins/connection/paramiko_ssh.py", line 245, in _connect self.ssh = SSH_CONNECTION_CACHE[cache_key] = self._connect_uncached() File "/home/dev1/src/ansible/lib/ansible/plugins/connection/paramiko_ssh.py", line 368, in _connect_uncached raise AnsibleConnectionFailure(msg) AnsibleConnectionFailure: Invalid key 2019-05-28 13:51:49,687 p=dev1 u=22489 | fatal: [10.0.0.99]: FAILED! => { "msg": "Invalid key" } 2019-05-28 13:51:49,689 p=dev1 u=22489 | PLAY RECAP ******************************************************************************************************************************************************************************* 2019-05-28 13:51:49,689 p=dev1 u=22489 | 10.0.0.99 : ok=0 changed=0 unreachable=0 failed=1 skipped=0 rescued=0 ignored=0 2019-05-28 13:51:49,756 p=dev1 u=22508 | shutdown complete -- You received this message because you are subscribed to the Google Groups "Ansible Project" group. To unsubscribe from this group and stop receiving emails from it, send an email to [email protected]. To post to this group, send email to [email protected]. To view this discussion on the web visit https://groups.google.com/d/msgid/ansible-project/0e8f3343-45b4-439f-a94a-7fae3f4f60c2%40googlegroups.com. For more options, visit https://groups.google.com/d/optout.
