Ansible - Acesso através do Bastião com MFA

9

No meu ambiente atual, todos os meus servidores Linux estão acessíveis apenas através de um host bastião, com o MFA ativado.

Consegui fazer com que o Ansible conversasse com êxito com os servidores através do bastião, o único problema é que ele estabelece uma nova conexão com o bastião para cada host, o que significa que tenho que inserir tantas chaves MFA quanto servidores. Tempos ruins. :(

Eu tentei mexer com coisas assim na minha configuração ssh para tentar fazer a multiplexação funcionar:

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

Infelizmente, não parece fazê-lo. Alguém recebeu algumas dicas sobre como eu posso impedir o Ansible de restabelecer sua conexão através do meu host bastião para cada host que ele toca?

Obrigado!

Paul Kirby
fonte
Provavelmente já lhe ocorreu, mas ... Se o seu host bastião permitir acesso regular ao login, em vez de apenas o encaminhamento de pacotes, e sua configuração ansible não contiver um grande volume de arquivos, tente executar a sua configuração diretamente a partir do bastião .
Parthian Shot
Não necessariamente do host bastião, mas poderia ser qualquer host no mesmo ambiente. Dedicamos hosts de controle Ansible. Isso garante que os usuários não tenham nenhuma configuração Ansible estranha ou versão Ansible não suportada em execução. Além disso, isso melhora muito a velocidade do manual.
Udondan 01/03
(Eu não sei o que é MFA) Tenha você ativar ForwardAgentna sua configuração ssh da sua estação de trabalho (não o bastião)
Baptiste Mille-Mathias

Respostas:

1

Eu apenas tropecei nesta postagem de blog sobre como executar o Ansible com um host de bastiões .

Aparentemente, você precisa adicionar o host bastião ao host de controle 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 o ssh_argsin em ansible.cfg:

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

Isso deve cobrir a bastionparte da configuração. Por MFAparte, algum usuário nesta questão do github afirma que é possível usar uma sessão ssh no Ansible aberta fora do Ansible.

Eu abro a conexão inicial com o host que possui 2FA e, em outra janela, execute algo como:

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

Eu não tenho uma configuração de host bastião em mãos, mas acho que vale a pena tentar esta estratégia.

Henrik Pingel
fonte