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
Ansible Hostでコマンドssh [email protected]
を発行すると、ターゲットサーバーに問題なく接続できます。また、パスワードプロンプトなしで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
他のオプションは、sudoerファイルからのrequiretty
の設定を無効にしていました。
@Michael Hamptonについてさらに詳しく説明します。 Ansibleはsshエラーをマスクしています。
私の場合、-vvvvの詳細レベルで表示される真のエラーは次のとおりです:Host key verification failed.
そして私はここに解決策を見つけました:
基本的に、sshオプションを提供します:-o StrictHostKeyChecking=no