使用 Ansible 处理键盘交互输入

使用 Ansible 处理键盘交互输入

我已经设置了一些 GNU/Linux(Ubuntu 和 Amazon Linux)服务器,使用google-authenticatorPAM 模块和keyboard-interactive:pamSSHD 身份验证方法提示基于时间的 OTP。我正在努力让 ansible 提示我输入 OTP。该--ask-pass标志在建立连接之前要求输入密码,并在建立连接时传递密码。我需要的是让 ansible 将服务器上 SSHD 的 OTP 请求传递给我的 shell。有什么办法可以做到这一点吗?

目前,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
}

amazon1 上的 sshd_config

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

amazon1 上的 pam 配置

#%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 ~]$

我知道我可以在 sshd_config 中排除特定用户被提示输入 OTP。但是我不想这样做。我希望我没有错过一个明显的 ansible 标志。提前致谢。

答案1

正如已经指出的,Ansible 目前不支持双因素身份验证。

似乎有两个选项可以解决此警告:

  1. 禁用 Ansible 用户的双因素身份验证

我正在使用 duo auth 解决这个问题,方法是排除 pam_duo.conf 和 login_duo.conf 中的 ansible 用户组,然后在 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 问题

答案2

不,Ansible 不支持这一点,正如github 问题s):

是的,我们目前不打算支持它。

您确实应该考虑 SSH 密钥。

相关内容