我正在设置 ansible 来管理整个服务器场。我的方法如下:
允许用户连接到所有服务器,并使用强大的 RSA 密钥、密码保护和用户密码来保护其连接。
为了尽可能地自动化该过程,我希望在保险库文件或加密字符串中传递 RSA 密码和用户密码。
当我在客户端设置两种身份验证方法(公钥+用户密码)并仅通过 ping 到测试服务器进行测试(手动传递密码)时,系统会提示我输入 RSA 密码但没有密码,显然剧本的执行会失败。
如果我仅设置用户密码作为身份验证方法,剧本就会正常执行。
如果我仅使用其密码验证设置 RSA 密钥,则工作不会结束,这是我屏幕上至少 30 分钟的输出(研究、喝咖啡的时间,..)
PLAY [all] ******************************************************************************************************************************************************************
TASK [Gathering Facts] ******************************************************************************************************************************************************
Enter passphrase for key '/home/users/<user_name>/.ssh/id_rsa':
ok: [<test_server_ip_address>]
TASK [include vars] *********************************************************************************************************************************************************
ok: [<test_server_ip_address>]
TASK [test connection] ******************************************************************************************************************************************************
还有其他东西。
我正在尝试执行的剧本是这个
---
- hosts: all
tasks:
- name: test connection
ping:
执行playbok的下一个命令是:
ansible-playbook -i ansible_hosts/test_hosts.yml playbooks/ping.yml
内容test_host.yml
:
all:
hosts:
<test_server_ip_address>
我的问题是:
可以为 ansible 设置双因素身份验证吗?如果可以,有人可以给我指点迷津吗?
答案1
我怀疑您是否可以使用来自 Ansible vault 的 ssh 密钥密码,但一般的双因素工作流程如下:
在服务器端,使用以下方式启用双因素身份验证:
AuthenticationMethods "publickey,password"
在sshd_config
。
在客户端(Ansible):
- 设置 ssh-agent,在需要连接时向代理添加受密码保护的密钥
ansible_password
在 Ansible Vault 中为每个主机定义- 运行剧本