Ansible - Accès via Bastion avec MFA

9

Dans mon environnement actuel, tous mes serveurs Linux sont uniquement accessibles via un hôte bastion, sur lequel MFA est activé.

J'ai réussi à faire en sorte qu'Ansible réussisse à parler aux serveurs via le bastion, le seul problème est qu'il établit une nouvelle connexion au bastion pour chaque hôte, ce qui signifie que je dois saisir autant de clés MFA que de serveurs. Mauvais moments. :(

J'ai essayé de jouer avec des trucs comme ça dans ma configuration ssh pour essayer de faire fonctionner le multiplexage:

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

Malheureusement, cela ne semble pas le faire. Quelqu'un a-t-il reçu des conseils sur la façon d'empêcher Ansible de rétablir sa connexion via mon hôte bastion pour chaque hôte qu'il touche?

Merci!

Paul Kirby
la source
Cela vous est probablement déjà venu à l'esprit, mais ... Si votre hôte bastion permet un accès de connexion régulier plutôt que simplement le transfert de paquets, et que votre configuration ansible ne contient pas un énorme volume de fichiers, vous pouvez essayer d'exécuter votre configuration directement depuis le bastion .
Parthian Shot
Pas nécessairement de l'hôte bastion mais il peut s'agir de n'importe quel hôte dans le même environnement. Nous avons dédié des hôtes de contrôle Ansible. Cela garantit que les utilisateurs n'ont pas de configuration Ansible étrange ou de version Ansible non prise en charge. Cela améliore également beaucoup la vitesse du playbook.
udondan
(Je ne sais pas ce qu'est MFA) Avez-vous activé ForwardAgentdans votre configuration ssh de votre poste de travail (pas le bastion)
Baptiste Mille-Mathias

Réponses:

1

Je suis juste tombé sur ce billet de blog sur l'exécution d'Ansible avec un hôte bastion .

Apparemment, vous devez ajouter l'hôte bastion à l'hôte de contrôle 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

Modifiez l'entrée ssh_argsdans ansible.cfg:

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

Cela devrait couvrir la bastionpartie de la configuration. Pour une MFApartie, certains utilisateurs de ce problème github prétendent qu'il est possible d'utiliser une session ssh dans Ansible ouverte en dehors d'Ansible.

J'ouvre la connexion initiale à l'hôte qui a 2FA, puis dans une autre fenêtre, lance quelque chose comme:

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

Je n'ai pas de configuration d'hôte bastion à portée de main, mais je pense que cette stratégie vaut la peine d'être essayée.

Henrik Pingel
la source