【发布时间】:2020-04-22 13:57:06
【问题描述】:
出于安全原因和合规性考虑,我们需要在主机上设置 2FA。我们通过使用 sshd_config 中的AuthenticationMethods 设置强制使用密码和公钥进行身份验证来实现它。私钥也需要有密码。
所以为了在这些主机上运行 playbook,我们需要能够输入登录密码和私钥密码。我在主机文件中使用了-k 标志和ansible_ssh_private_key_file 选项(或--private-key 标志)。它要求输入 SSH 登录密码,但它只是挂起,从不要求我输入私钥密码。当我设置-vvvv 平面时,我看到密钥已正确传递,但未通过命令传递 SSH 登录密码:
<10.1.2.2> SSH: EXEC sshpass -d10 ssh -vvv -C -o ControlMaster=auto -o ControlPersist=60s -o Port=22022 -o 'IdentityFile="/home/me/.ssh/id_ed25519"' -o 'User="me"' -o ConnectTimeout=10 -o ControlPath=/home/me/.ansible/cp/db574551ae 10.1.2.2 '/bin/sh -c '"'"'echo ~me && sleep 0'"'"''
如何让 Ansible 同时使用密码和公钥?
【问题讨论】:
-
当您加密您的私钥时,您已经拥有 2FA:您拥有 (1) 密钥并且您知道 (2) 密码。
-
@ceving 是的,但为了符合 PCI DSS,我们应该同时使用两者
-
听起来你需要在ssh-agent下运行ansible-playbook,此时你将你的私钥添加到代理中(提供当时的密钥密码)然后
sshpass应该(?)按预期运行,因为不会提示输入私钥密码