Ansible: acceso a través del bastión con MFA

9

En mi entorno actual, solo tengo acceso a todos mis servidores Linux a través de un servidor bastión, que tiene MFA habilitado.

Logré que Ansible se comunique con los servidores con éxito a través del bastión, el único problema es que establece una nueva conexión al bastión para cada host, lo que significa que tengo que ingresar tantas claves MFA como servidores. Malos tiempos. :(

He intentado jugar con cosas como esta en mi configuración ssh para intentar que la multiplexación funcione:

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

Lamentablemente no parece hacerlo. ¿Alguien recibió algunos consejos sobre cómo puedo evitar que Ansible restablezca su conexión a través de mi host de bastión para cada host que toque?

¡Gracias!

Paul Kirby
fuente
Probablemente ya se te haya ocurrido, pero ... Si tu servidor bastión permite el acceso de inicio de sesión regular en lugar de solo el reenvío de paquetes, y tu configuración ansible no contiene un gran volumen de archivos, puedes intentar ejecutar tu configuración directamente desde el bastión .
Parthian Shot
No necesariamente del host del bastión, pero podría ser cualquier host en el mismo entorno. Tenemos hosts de control Ansible dedicados. Esto garantiza que los usuarios no tengan una configuración Ansible extraña o una versión Ansible no compatible en ejecución. Además, esto mejora mucho la velocidad del libro de jugadas.
udondan
(No sé qué es MFA) ¿Habilita ForwardAgentla configuración ssh de su estación de trabajo (no el bastión)
Baptiste Mille-Mathias

Respuestas:

1

Acabo de tropezar con esta publicación de blog sobre la ejecución de Ansible con un servidor bastión .

Aparentemente necesita agregar el servidor bastión al servidor de control 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

Edite la entrada ssh_argsen ansible.cfg:

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

Eso debería cubrir la bastionparte de la configuración. Por una MFAparte, algunos usuarios en este problema de github afirman que es posible usar una sesión ssh en Ansible abierta fuera de Ansible.

Abro la conexión inicial al host que tiene 2FA, luego en otra ventana ejecuto algo como:

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

No tengo una configuración de host de bastión a mano, pero creo que vale la pena probar esta estrategia.

Henrik Pingel
fuente