В моей текущей среде все мои серверы 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'
У меня нет под рукой настройки хоста-бастиона, но я думаю, что эту стратегию стоит попробовать.