如果我没有AWS密钥对,也没有创建/删除EC2实例的权限,只能通过SSH keypair.pem
访问一个实例,我还可以使用Ansible来设置我的服务器吗?
由于我无法访问所有EC2实例,我可以根本不使用boto / aws密钥对,只需添加我在清单文件中有权访问的唯一EC2实例吗?
我在库存文件上尝试了这个:
[aws_server]
aws_instance ansible_host='MY_EC2_INSTANCE.us-west-2.compute.amazonaws.com' ansible_user='ubuntu' ansible_ssh_private_key_file='/myproject/testkey.pem'
但无法与ansible-playbook -i inventory site.yml
:
fatal: [aws_instance]: UNREACHABLE! => {"changed": false, "msg": "Failed to connect to the host via ssh.", "unreachable": true}
PS:我可以毫无问题地运行ssh -i testkey.pem ubuntu@MY_EC2_INSTANCE.us-west-2.compute.amazonaws.com
答案 0 :(得分:2)
问题出现了,因为我使用的是AWS主机名而不是IP,并且出于某种原因,它“太长了”。我是怎么发现的?正如来自#ansible IRC频道的用户所建议的那样,我使用-vvvv
运行它以获得完整日志,并且能够看到发出错误的SSH命令。</ p>
ansible-playbook -vvvv -i inventory site.yml
我尝试运行SSH命令Ansible使用相同的选项和-vvvv
运行,并且在失败之前的日志的最后几行是:
debug1: setting up multiplex master socket
debug3: muxserver_listen: temporary control path /Users/vmenezes/.ansible/cp/ansible-ssh-MY_EC2_INSTANCE.us-west-2.compute.amazonaws.com-22-ubuntu.NSUADT9KwyIpvhWi
unix_listener: "/path/to/my/project/.ansible/cp/ansible-ssh-MY_EC2_INSTANCE.us-west-2.compute.amazonaws.com-22-ubuntu.NSUADT9KwyIpvhWi" too long for Unix domain socket
正如您所见,最后一行清楚地说too long for Unix domain socket
。我不确切地知道为什么这个限制,因为它确实是一个有效的URL,但改变IP地址解决了问题。
要记住一些事情,当一切都失败时,-vvvv
真的有助于了解幕后发生的事情。
答案 1 :(得分:0)
密钥对应足以允许您连接EC2实例。我只是尝试使用我的设置,它似乎正在工作。
您是否尝试使用相关密钥对的完整路径?对我而言,这就是诀窍。