Lidando com entradas interativas de teclado com Ansible

2

Configurei alguns servidores GNU / Linux (Ubuntu e Amazon Linux) para solicitar o OTP baseado em tempo usando o módulo google-authenticator para o PAM e o método de autenticação keyboard-interactive:pam SSHD. Eu estou lutando para obter ansible para me pedir o OTP. O --ask-pass flag solicita a senha antes de fazer a conexão e a transmite ao fazer a conexão. O que eu preciso é ansible apenas passar o pedido OTP do SSHD nos servidores para o meu shell. Existe uma maneira de fazer isso?

Atualmente, ansible não repassa a resposta de maneira confiável ao servidor.

➜  ansible git:(master) ✗ ansible -m ping amazon1 --inventory-file=./ansible_hosts
Verification code: <I QUICKLY ENTER THE OTP HERE>
amazon1 | UNREACHABLE! => {
    "changed": false,
    "msg": "Failed to connect to the host via ssh.",
    "unreachable": true
}

sshd_config no amazon1

...snip...
UsePAM yes
PubkeyAuthentication yes
ChallengeResponseAuthentication yes
AuthenticationMethods publickey,keyboard-interactive:pam
...snip...

pam config on amazon1

#%PAM-1.0
auth        required        pam_sepermit.so
auth       required     pam_google_authenticator.so
...snip...

Normalmente, o SSH funciona assim:

➜  ansible git:(master) ✗ ssh amazon1
Verification code:
Last login: Sun Mar 12 04:32:37 2017 from ip-10-0-1-23.ec2.internal
[admin@amazon1 ~]$

Eu sei que posso excluir um usuário específico da solicitação de OTP em sshd_config. Eu não quero fazer isso, no entanto. Espero não sentir falta de uma bandeira ansiosa para isso. Agradecemos antecipadamente.

    
por eternaltyro 14.03.2017 / 07:13

2 respostas

3

Como já foi dito, a autenticação de dois fatores atualmente não é suportada pelo Ansible.

Parece haver duas opções para solucionar essa limitação:

  1. desativando a autenticação de dois fatores para o usuário Ansible

I'm working around this with duo auth by excluding the ansible user's group in pam_duo.conf and login_duo.conf, and then setting the following in sshd_config:

Match User ansible  
    AuthenticationMethods publickey

Desativa efetivamente a autenticação de dois fatores para o usuário Ansible.

  1. usando um host bastião

I finally implemented something similar to this: http://blog.scottlowe.org/2015/12/24/running-ansible-through-ssh-bastion-host/

I open up the initial connection to the host which has 2FA, then in another window run something like:

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

Veja a discussão neste problema do github .

    
por 14.03.2017 / 11:20
2

Não, o Ansible não quer apoiar isso, conforme discutido na questão do github (s ):

Yep, not something we're immediately planning to support.

You should really consider SSH keys.

    
por 14.03.2017 / 07:32