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

Ansible - доступ через Bastion с MFA

В моей текущей среде все мои серверы Linux доступны только через хост-бастион, на котором включена MFA.

Мне удалось заставить Ansible успешно общаться с серверами через бастион, единственная проблема заключается в том, что он устанавливает новое соединение с бастионом для каждого хоста, а это означает, что я должен ввести столько ключей MFA, сколько у меня есть серверов. Плохие времена. :(

Я пробовал возиться с такими вещами в моей конфигурации ssh, чтобы попытаться заставить работать мультиплексирование:

Host bastion
  ControlMaster auto
  ControlPath ~/.ssh/ansible-%r@%h:%p
  ControlPersist 5m

К сожалению, похоже, этого не происходит. У кого-нибудь есть несколько советов о том, как я могу остановить повторное установление соединения Ansible через мой хост-бастион для каждого хоста, которого он касается?

Спасибо!

Я только что наткнулся на это сообщение в блоге о запуске Ansible с бастионным хостом.

Видимо вам нужно добавить хост бастиона к хосту управления ssh_config:

Host 10.10.10.*
  ProxyCommand ssh -W %h:%p bastion.example.com
  IdentityFile ~/.ssh/private_key.pem

Host bastion.example.com
  Hostname bastion.example.com
  User ubuntu
  IdentityFile ~/.ssh/private_key.pem
  ControlMaster auto
  ControlPath ~/.ssh/ansible-%r@%h:%p
  ControlPersist 5m

Отредактируйте ssh_args в в ansible.cfg:

[ssh_connection]
ssh_args = -F ./ssh.cfg -o ControlMaster=auto -o ControlPersist=30m control_path = ~/.ssh/ansible-%%r@%%h:%%p

Это должно прикрыть bastion часть конфигурации. Для MFA часть пользователя в этом проблема с github утверждает, что в Ansible можно использовать сеанс ssh, открытый вне Ansible.

Я открываю начальное соединение с хостом с 2FA, затем в другом окне запускаю что-то вроде:

ansible-playbook thing.yml --ssh-common-args='-o ControlPath=~/.ssh/connshare'

У меня нет под рукой настройки хоста-бастиона, но я думаю, что эту стратегию стоит попробовать.