Подтвердить что ты не робот

Можно ли с бастионным хостом/прыжком?

Я довольно уверен, что видел в документации, где вы можете указать, что для подключения к определенным узлам, которые она сначала должна туннелировать через хост DMZ. Однако я не могу найти какую-либо документацию за пределами некоторых дебатов в списках рассылки.

Я знаю, что взломать это с помощью конфигурации ssh, как на этой странице http://alexbilbie.com/2014/07/using-ansible-with-a-bastion-host/, однако, что чрезмерно сложный kludge для чрезвычайно общего требования в любом виде мягко регулируемая среда.

Есть ли способ сделать это без использования настраиваемых конфигураций ssh ​​и колдовства voodoo netcat?

4b9b3361

Ответ 1

С помощью Ansible 2 это встроенная опция:

Как настроить хост-переход для доступа к серверам, к которым у меня нет прямого доступа?

С помощью Ansible 2 вы можете установить ProxyCommand в переменной инвентаря ansible_ssh_common_args. Любые аргументы, указанные в этой переменной, добавляются в командную строку sftp/scp/ssh при подключении к соответствующим хостам. Рассмотрим следующую группу инвентаризации:

[gatewayed]
foo ansible_host=192.0.2.1
bar ansible_host=192.0.2.2

Вы можете создать group_vars/gatewayed.yml со следующим содержимым:

ansible_ssh_common_args: '-o ProxyCommand="ssh -W %h:%p -q [email protected]"'

Ansible добавит эти аргументы в командную строку при попытке подключиться к любым хостам в группе gatewayed. (Эти аргументы используются в дополнение к любым ssh_args из ansible.cfg, поэтому вам не нужно повторять глобальные параметры ControlPersist в ansible_ssh_common_args.)

Обратите внимание, что ssh -W доступен только с OpenSSH 5.4 или новее. В более старых версиях необходимо выполнить nc% h:% p или некоторую эквивалентную команду на хосте bastion.

Ответ 2

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

ansible_ssh_common_args: '-o ProxyCommand="ssh -i <path-to-pem-file> -W %h:%p -q [email protected]"'

Я потратил часы, пытаясь исправить проблему, которая теперь кажется простым и очевидным решением.

Ответ 3

Поскольку Ansible использует SSH, вы можете указать хост бастиона в стандартном режиме SSH:

например. для подключения через хост bastion для всех серверов, которые имеют имя типа "*.amazonaws.com":

Host *.amazonaws.com
  ProxyCommand ssh -W %h:%p my_bastion_host.example.org

Когда выполняется ansible или ansible-playbook, он будет считываться в вашем конфигурационном файле SSH и применять его для соединений. Вы также можете указать, какой файл конфигурации SSH считывается с помощью переменной окружения ANSIBLE_SSH_ARGS или с помощью флага -F при вызове команды.

Вы также можете указать больше аргументов SSH в ansible.cfg.