Я пытаюсь использовать Ansible 2.7.7
справляться Ubuntu 16.04 cloud image
но когда я пытаюсь установить соединение, я получаю сообщение об ошибке:
SSH Error: data could not be sent to remote host "192.168.111.11". Make sure this host can be reached over ssh
Если я дам команду ssh ubuntu@192.168.111.11
на хосте Ansible я могу без проблем подключиться к целевому серверу. я тоже могу sudo
там без запроса пароля.
Если посмотреть журналы целевой машины, я вижу, что Ansible успешно вошел в систему:
Feb 20 11:44:51 ubuntu sshd[2870]: Accepted publickey for ubuntu from 192.168.111.111 port 56236 ssh2: RSA SHA256:yI...
Feb 20 11:44:51 ubuntu sshd[2870]: pam_unix(sshd:session): session opened for user ubuntu by (uid=0)
Feb 20 11:44:51 ubuntu systemd-logind[1090]: New session 13 of user ubuntu.
Feb 20 11:44:51 ubuntu sudo: ubuntu : TTY=unknown ; PWD=/home/ubuntu ; USER=root ; COMMAND=/bin/sh -c echo BECOME-SUCCESS-kldfjkldjhjljkl; /usr/bin/python
Feb 20 11:44:51 ubuntu sudo: pam_unix(sudo:session): session opened for user root by (uid=0)
Feb 20 11:44:51 ubuntu sudo: pam_unix(sudo:session): session closed for user root
Подробный вывод:
ansible-playbook -i inventory default.yaml -vvv
ansible-playbook 2.7.7
config file = /home/admin/ansible/ansible.cfg
configured module search path = [u'/home/admin/.ansible/plugins/modules', u'/usr/share/ansible/plugins/modules']
ansible python module location = /home/admin/ansible/ansible-env/local/lib/python2.7/site-packages/ansible
executable location = /home/admin/ansible/ansible-env/bin/ansible-playbook
python version = 2.7.12 (default, Nov 12 2018, 14:36:49) [GCC 5.4.0 20160609]
Using /home/admin/ansible/ansible.cfg as config file
/home/admin/ansible/inventory did not meet host_list requirements, check plugin documentation if this is unexpected
/home/admin/ansible/inventory did not meet script requirements, check plugin documentation if this is unexpected
Parsed /home/admin/ansible/inventory inventory source with ini plugin
PLAYBOOK: default.yaml *******************************************************************************************************************************************************************************************************************
1 plays in default.yaml
PLAY [default] ***************************************************************************************************************************************************************************************************************************
TASK [Gathering Facts] *******************************************************************************************************************************************************************************************************************
task path: /home/admin/ansible/default.yaml:3
Using module file /home/admin/ansible/ansible-env/local/lib/python2.7/site-packages/ansible/modules/system/setup.py
<192.168.111.11> ESTABLISH SSH CONNECTION FOR USER: ubuntu
<192.168.111.11> SSH: EXEC ssh -C -o ControlMaster=auto -o ControlPersist=60s -o KbdInteractiveAuthentication=no -o PreferredAuthentications=gssapi-with-mic,gssapi-keyex,hostbased,publickey -o PasswordAuthentication=no -o User=ubuntu -o ConnectTimeout=10 -o ControlPath=/home/admin/.ansible/cp/a9e60c69b0 192.168.111.11 '/bin/sh -c '"'"'sudo -H -S -n -u root /bin/sh -c '"'"'"'"'"'"'"'"'echo BECOME-SUCCESS-tenlfcstwmojszikegdyatixrzpwqwah; /usr/bin/python'"'"'"'"'"'"'"'"' && sleep 0'"'"''
Escalation succeeded
fatal: [192.168.111.11]: UNREACHABLE! => {
"changed": false,
"unreachable": true
}
MSG:
SSH Error: data could not be sent to remote host "192.168.111.11". Make sure this host can be reached over ssh
Что могло вызвать эту проблему?
Оказывается, нужна моя целевая система tty
когда используешь sudo
.
Я смог установить связь, комментируя эту строку из ansible.cfg
:
pipelining = True
Другой вариант - отключить настройку requiretty
из файла sudoer.
Чтобы подробнее рассказать о комментарии @Michael Hampton и. Ansible маскирует ошибку ssh.
В моем случае истинная ошибка, показанная с подробным уровнем -vvvv был: Host key verification failed.
и я нашел решение здесь:
В принципе, укажите параметр ssh: -o StrictHostKeyChecking=no