如何通过ansible生成密钥对然后ssh到aws实例中以运行该实例上的命令

fuz*_*zzi 5 amazon-ec2 amazon-web-services ansible

我正在创建一个Ansible Playbook,我已经创建了一个新的AWS EC2实例.我现在想要SSH到这个实例并在该实例的shell中运行一些命令.我该怎么做呢?有没有办法通过ansible生成密钥对,还是最好使用现有密钥对?

我已经在线查看了Ansible ec2的在线资源 - 创建,终止,启动或停止ec2中的实例(http://docs.ansible.com/ansible/latest/ec2_module.html)以及在线博客.虽然,我无法弄清楚如何SSH到实例,或在网上看到一个例子.

使用:

  - name: Wait for SSH to come up
      wait_for:
        host: "{{ item.public_ip }}"
        port: 22
        delay: 60
        timeout: 320
        state: started
      with_items: "{{ ec2.instances }}"
Run Code Online (Sandbox Code Playgroud)

从ansible-playbook文档中生成以下错误:

"msg":"等待时超时:22"

该实例也是在没有公共DNS的情况下创建的,用于通过CLI将SSH连接到实例.

任何有关如何通过ssh进入实例ansible-playbook或生成实例的公共DNS名称的帮助将不胜感激.

Wil*_*ich 4

您似乎对 AWS 实例的工作原理存在根本性的误解。创建实例时,它会为默认用户分配一个密钥对。(例如,对于 Amazon Linux 实例,用户将为 ec2-user,ubuntu 映像使用 ubuntu 用户)。

该密钥对可以在实例的 ec2 控制台的详细信息中看到。所有现有的密钥对都可以在 ec2 控制台的“密钥对”部分下看到。

为了能够通过 ssh 连接到使用刚刚创建的密钥启动的实例,您需要执行以下操作:

  1. 本地生成密钥对(使用shell: ssh-keygen ...
  2. 从本地生成的密钥对创建 ec2 密钥对(使用ec2_key: ...
  3. 使用命名的 ec2 密钥对启动实例(使用ec2: ...
  4. 使用步骤 1 中生成的密钥调用同一 playbook 中刚刚启动的实例。

步骤 1-3 应作为 运行hosts: 127.0.0.1

第 4 步需要hosts:在同一 playbook 中作为单独的调用来完成,并且并不像看起来那么容易。您将需要有某种方法来指定文件中新创建的实例hosts、Ansiblegroup_vars路径、使用add_hosts模块和/或以某种方式找到它的 IP 地址(可能通过使用实例标签)。

找到实例后,private_key_file即可使用 Ansible 变量指定步骤 1 中的密钥并通过 ssh 进入实例。

并不是说它不能完成,而是由于为了每次进入实例时都有一个新的密钥对而这样做的难度和不切实际,我建议不要这样做,除非绝对必要。如果出于安全考虑,最好制定适当的密钥轮换策略。