Назад | Перейти на главную страницу

Обработка интерактивного ввода с клавиатуры с помощью Ansible

Я установил несколько серверов GNU / Linux (Ubuntu и Amazon Linux), чтобы запрашивать OTP на основе времени с использованием google-authenticator модуль для PAM и keyboard-interactive:pam Метод аутентификации SSHD. Я изо всех сил пытаюсь получить доступ, чтобы предложить мне OTP. В --ask-pass flag запрашивает пароль перед установкой соединения и передает его при установлении соединения. Мне нужно, чтобы ansible просто передавал запрос OTP с SSHD на серверах в мою оболочку. Как я могу это сделать?

В настоящее время ansible не передает ответ на сервер надежно.

➜  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 на amazon1

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

конфигурация pam на amazon1

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

Обычно SSH работает так:

➜  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 ~]$

Я знаю, что могу исключить конкретного пользователя из-под запроса OTP в sshd_config. Однако я не хочу этого делать. Надеюсь, я не пропустил очевидный флаг возможности для этого. Заранее спасибо.

Как уже указывалось, двухфакторная аутентификация в настоящее время не поддерживается Ansible.

Кажется, есть два варианта обхода этой оговорки:

  1. отключение двухфакторной аутентификации для пользователя Ansible

Я работаю над этим с помощью duo auth, исключив группу пользователей ansible в pam_duo.conf и login_duo.conf, а затем установив следующее в sshd_config:

Match User ansible  
    AuthenticationMethods publickey

Так эффективно отключение двухфакторной аутентификации для пользователя Ansible.

  1. используя бастионный хозяин

Наконец я реализовал нечто подобное: http://blog.scottlowe.org/2015/12/24/running-ansible-through-ssh-bastion-host/

Я открываю начальное соединение с хостом с 2FA, затем в другом окне запускаю что-то вроде:

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

Взгляните на обсуждение в этом проблема с github.

Нет, Ansible не хочет поддерживать это, как обсуждается в проблема с github(s):

Да, это не то, что мы сейчас планируем поддерживать.

Вам действительно стоит подумать о ключах SSH.