Я установил несколько серверов 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.
Кажется, есть два варианта обхода этой оговорки:
Я работаю над этим с помощью duo auth, исключив группу пользователей ansible в pam_duo.conf и login_duo.conf, а затем установив следующее в sshd_config:
Match User ansible AuthenticationMethods publickey
Так эффективно отключение двухфакторной аутентификации для пользователя Ansible.
Наконец я реализовал нечто подобное: 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.