
Я создал экземпляр ec2 с открытым портом 22 и могу подключиться к этому экземпляру, используя закрытый ключ из моего терминала, однако, я не могу подключиться к нему, когда пробую ansible-playbook. Я использовал динамический инвентарь.
Команда, которую я использую для SSH и которая также успешна (я запускаю команду ниже, где находится закрытый ключ):
ssh -i "test-key.pem" [email protected]
Содержание книги:
---
- 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 OS 18.04.
Когда я запускаю ./ec2.py - я вижу, что мой экземпляр печатается. Ключи AWS сохраняются в папке домашнего каталога .aws/credentials.
P.S.: Этот вопрос мог быть дубликатом других доступных вопросов, но я не получил никаких положительных ответов, соответствующих моему случаю.
решение1
Я не понял, что скрипт ec2.py, который использовался, возвращал только экземпляры с частными IP-адресами. И из-за этого он не смог подключиться к экземпляру на порту 22.
Однако при использовании SSH я использовал публичный IP-адрес или DNS-имя.
Поэтому вместо использования ec2.py я выполнил скрипт, используя публичный IP-адрес:
ansible-playbook -i a.b.c.d, playbook-hello-world.yml
abcd — публичный 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 установлен по указанному пути экземпляра, на котором вы пытаетесь выполнить плейбук.