amazon-ec2 – 我可以使用ssh keyfile没有aws密钥/对运行ec2上的ansible playbook吗?

如果我没有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没有问题

最佳答案 问题出现了,因为我使用AWS主机名而不是IP,并且出于某种原因它“太长”了.我是怎么发现的?正如#ansible IRC频道的用户所建议的那样,我使用-vvvv运行它来获取完整日志,并且能够看到发出错误的SSH命令.

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

正如你可以看到,最后一行清楚地表明Unix域套接字太长了.我不确切地知道为什么这个限制,因为它确实是一个有效的URL,但改变IP地址解决了问题.

需要记住的是,当一切都失败时,-vvvv真的很有助于了解幕后发生的事情.

点赞