Назад | Перейти на главную страницу

Невозможно запустить ansible-playbook на хосте ec2, SSH через терминал работает нормально

Я создал экземпляр ec2 с открытым портом 22, и я могу подключиться к этому экземпляру, используя закрытый ключ с моего терминала, однако я не могу подключить его, когда пытаюсь использовать ansible-playbook. Я использовал динамический инвентарь.

Команда, которую я использую для SSH, тоже успешно работает (я запускаю команду ниже, в которой размещен закрытый ключ):

ssh -i "test-key.pem" ubuntu@ec2-x-x-x-x.eu-central-1.compute.amazonaws.com

Контент для пьесы:

---
- name: Hello World example
  hosts: all
  become: true

  tasks:
    - name: Printing Hello World
      debug:
          msg: "Hello World"

Команда, которую я выполнил:

ansible-playbook -i ec2.py --private-key /home/testuser/.ssh/test-key.pem -l instance_id playbook-hello.yml

даже я пробовал:

ansible-playbook -i ec2.py --private-key /home/testuser/.ssh/test-key.pem -l instance_id -e 'ansible_ssh_user=ubuntu' playbook-hello.yml

Ошибка:

fatal: [x.x.x.x]: UNREACHABLE! => {"changed": false, "msg": "Failed to connect to the host via ssh: ssh: connect to host x.x.x.x port 22: Operation timed out\r\n", "unreachable": true}

Другие детали:

Я использую ansible-playbooks на своем MacBook Pro. Экземпляр EC2 работает под управлением ОС Ubuntu 18.04.

Когда я запускаю ./ec2.py - я вижу, что мой экземпляр печатается. Ключи AWS сохраняются в папке .aws / credentials домашнего каталога.

P.S: Этот вопрос может быть копией других имеющихся вопросов, но я не получил никакого положительного мнения, которое соответствовало бы моему случаю.

Мне было плохо понять, что использованный скрипт ec2.py возвращал только экземпляры с частными IP-адресами. И из-за этого он не смог подключиться к экземпляру через порт 22.

Однако, когда я делал ssh, я использовал публичный IP-адрес или DNS-имя.

Поэтому вместо использования ec2.py я выполнил сценарий, используя общедоступный IP-адрес:

ansible-playbook -i a.b.c.d, playbook-hello-world.yml

a.b.c.d - публичный IP экземпляра.

Если случайно кто-то получит ошибку ниже:

TASK [Gathering Facts] ***************************************************************************************************************************************
fatal: [a.b.c.d]: FAILED! => {"changed": false, "module_stderr": "Shared connection to a.b.c.d closed.\r\n", "module_stdout": "/bin/sh: 1: /usr/local/bin/python3: not found\r\n", "msg": "MODULE FAILURE\nSee stdout/stderr for the exact error", "rc": 127}

Пожалуйста, используйте следующую команду:

ansible-playbook -i a.b.c.d, -e 'ansible_python_interpreter=/usr/bin/python3' playbook-hello-world.yml

Просто убедитесь, что pythos3 установлен по указанному пути экземпляра, на котором вы пытаетесь выполнить playbook.