我知道这已经被问了很多,但是我已经尝试过我在网络上看到的20个线程的所有解决方案,但对我来说还没有任何效果。
我在使用ansible 2.1.1.0的Ubuntu 16.10 Linux本地计算机上尝试ping(ansible all -m ping
)我的Ansible子节点,该节点位于Ubuntu AWS EC2实例上。
我的/ etc / ansible / hosts拥有EC2的公共IP:
web1 ansible_host=52.91.x.y
我可以通过以下方式SSH进入EC2实例:
ssh -i "mypemfile.pem" ubuntu@52.91.x.y
所以我知道安全组/网络/等。在实例上很好。
但是当我尝试ping子节点时:
ansible all -m ping
我明白了:
Failed to connect to the host via ssh
当我通过-vvvv显示完整命令时:
ssh -C -vvv -o ControlMaster=auto -o ControlPersist=60s -o 'IdentityFile="/home/myuser/.ssh/id_rsa.pub"' -o KbdInteractiveAuthentication=no -o PreferredAuthentications=gssapi-with-mic,gssapi-keyex,hostbased,publickey -o PasswordAuthentication=no -o ConnectTimeout=10 -o ControlPath=/home/myuser/.ansible/cp/ansible-ssh-%h-%p-%r 52.91.x.y
然后运行Ansible正在运行的命令,在详细输出结束时显示:
debug1: Offering RSA public key: /home/myuser/.ssh/id_rsa.pub
debug3: send_pubkey_test
debug3: send packet: type 50
debug2: we sent a publickey packet, wait for reply
debug3: receive packet: type 51
debug1: Authentications that can continue: publickey
debug1: Offering RSA public key: Downloads/nginx-code-challenge-2017-03-16.pem
...skip some stuff
debug1: No more authentication methods to try.
Permission denied (publickey).
它从我的本地(Ansible主节点)系统尝试了许多不同的密钥,但没有成功。
我确保主节点的公钥位于子节点的.ssh/authorized_keys
中。当我执行ssh-copy-id时,它确认了这一点,说已经添加了密钥。
我已尝试在/etc/ansible/ansible.cfg中指定私钥的路径,但这没有做任何事情,我已经可以在调试输出中看到它正在尝试多个密钥。
我尝试添加-c paramiko
命令:
ansible all -m ping -vvvv -c paramiko
但我得到的是一个新错误,Authentication failed
我甚至在ansible.cfg
中尝试过像host_key_checking = False
这样的疯狂内容
帮助?
答案 0 :(得分:0)
您的手动SSH登录使用的是正确的身份文件(* .pem one)
ssh -i "mypemfile.pem" ubuntu@52.91.x.y
然而,Ansible正在联系您的公钥文件并将其用作私人身份文件:
'IdentityFile="/home/myuser/.ssh/id_rsa.pub"'
IdentityFile 参数需要私钥文件。你也希望它指向“mypemfile.pem”。
将远程虚拟机添加到〜/ .ssh / config
的SSH配置文件中 Host ec2
HostName something.compute.amazonaws.com
User ec2-user
IdentityFile /home/me/.ssh/mypemfile.pem
然后你的Ansible主机文件变得更加简单:
[EC2]
dev ansible_ssh_host=ec2
答案 1 :(得分:0)
解决方案最终变得非常简单。我错过了/ etc / ansible / hosts中的用户( ansible_ssh_user = ubuntu 部分):
[nginx]
web1 ansible_ssh_host=52.91.x.y ansible_ssh_user=ubuntu