Ansible'无法通过ssh'连接到主机

时间:2017-03-17 01:02:49

标签: ssh amazon-ec2 connection ansible

我知道这已经被问了很多,但是我已经尝试过我在网络上看到的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这样的疯狂内容

帮助?

2 个答案:

答案 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