Назад | Перейти на главную страницу

Ansible - ошибка SSH: данные не могут быть отправлены на удаленный хост

Я пытаюсь использовать 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. и я нашел решение здесь:

https://unix.stackexchange.com/questions/416166/cant-establish-ssh-connection-debug1-read-passphrase-cant-open-dev-tty-n#answer-416186

В принципе, укажите параметр ssh: -o StrictHostKeyChecking=no