【问题标题】:Ansible SSH authentication with password and private key使用密码和私钥进行 Ansible SSH 身份验证
【发布时间】: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应该(?)按预期运行,因为不会提示输入私钥密码

标签: ssh ansible


【解决方案1】:

Ansible Documentation中所述:

Ansible 不公开通道以允许用户和 使用 ssh 时手动接受密码以解密 ssh 密钥的 ssh 进程 连接插件(这是默认的)。强烈推荐使用 ssh-agent。

这就是为什么没有提示您输入私钥密码的原因。如 cmets 中所述,设置 ssh 代理,系统会提示您:

$ ssh-agent bash
$ ssh-add ~/.ssh/id_rsa

然后,在 playbook 执行后,clear out identities 下次会被要求输入密码:

# Deletes all identities from the agent:
ssh-add -D
# or, instead of adding identities, removes identities (selectively) from the agent:
ssh-add -d <file>

您可以将密钥添加、剧本执行和清理打包到一个包装器外壳脚本中。

【讨论】:

    猜你喜欢
    • 2015-10-20
    • 2015-12-07
    • 2013-10-08
    • 2017-04-05
    • 1970-01-01
    • 1970-01-01
    • 2020-08-19
    • 1970-01-01
    • 2015-05-04
    相关资源
    最近更新 更多