Ansible, подключение к серверу-бастиону в AWS VPC, хост недоступен

Как я могу подключиться к серверу-бастиону в AWS VPC с помощью Ansible 2.x для выполнения настройки Docker Swarm? Я видел этот вопрос и официальный FAQ.

Уже пытался предоставить следующее через --extra-vars: ansible_ssh_common_args: '-o ProxyCommand="ssh -W %h:%p -q [email protected]"' или даже использовать ansible.cfg с параметром выше, или даже что-то вроде:

[ssh_connection]
ssh_args = -o ControlMaster=auto -o ControlPersist=600s -J ec2- 
[email protected]

Я пробовал много комбинаций, но всегда получаю это сообщение об ошибке при выполнении команды ping в playbook:

UNREACHABLE! => {"changed": false, "msg": "Failed to connect to the 
host via ssh: ssh: connect to host 10.1.xx.xx port 22: Operation timed 
out\r\n",

Наверное, стоит упомянуть, что:

  1. Я могу подключиться к частным хостам в моем VPC, как правило, с помощью параметра ssh -J, например: ssh -J [email protected] [email protected].
  2. Я использую динамический инвентарь Ec2.py от Ansible с ec2.ini, настроенным для сопоставления частных IP-адресов для данной записи тега.

person Rogério Peixoto    schedule 11.07.2018    source источник
comment
Поскольку время истекает, вероятно, что-то неправильно настроено в таблицах маршрутов вашего VPC и NACL, или группы безопасности вашего экземпляра бастиона блокируют входящий сетевой трафик. Когда вы успешно подключаетесь к хосту-бастиону, происходит ли это с того же компьютера, на котором ваша playbook выполняет playbook SSH? Или playbook запускает playbook SSH на каком-то другом удаленном компьютере?   -  person Himal    schedule 11.07.2018


Ответы (1)


Это была проблема неправильной конфигурации ssh.

Я смог исправить конфигурацию с этими параметрами.

1) Файл Ansible.cfg

[ssh_connection]
ssh_args = -o ProxyCommand="ssh -W %h:%p -q $BASTION_USER@$BASTION_HOST" -o ControlPersist=600s 
control_path=%(directory)s/%%h-%%r
pipelining = True

2) Файл Ec2.ini

[ec2]
regions = us-xxxx-x
destination_variable = private_ip_address
vpc_destination_variable = private_ip_address

3) Команда выполнения Playbook

export BASTION_USER=xxx-xxxx;
export BASTION_HOST=ec2-xx-xx-xx-xx.xxxxx.compute.amazonaws.com;
ansible-playbook -u ec2-xxxx \
 -i ./inventory/ec2.py \
 ./playbook/ping.yml \
 --extra-vars \
 "var_hosts=tag_Name_test_private ansible_ssh_private_key_file=~/.ssh/my-test-key.pem" -vvv

И вуаля!

успешный пинг

person Rogério Peixoto    schedule 11.07.2018