Har*_*hur 9 ssh two-factor-authentication ansible ansible-playbook
我已经使用duosecurity为ssh启用了双因素身份验证(使用此playbook https://github.com/CoffeeAndCode/ansible-duo).
如何使用ansible立即管理服务器.由于这个原因,SSH调用在收集事实时失败.我希望运行剧本的人在播放剧本之前输入两个因子代码.
为部署用户禁用两个因素是一种可能的解决方案,但会产生一个安全问题,我希望避免这种问题.
我可以利用 sshControlMaster和 ansible 的功能将 ansible 与 ssh 和 2FA 结合使用。
我的本地 ssh 客户端配置为转储ControlPath用于多路复用连接的套接字。Ansible 配置为使用相同的套接字。
此配置为所有连接启用多路复用。我个人将此配置存储在`~/.ssh/config中:
Host *
ControlMaster auto
ControlPath ~/.ssh/master-%r@%h:%p.socket
ControlPersist 1m
Run Code Online (Sandbox Code Playgroud)
建立连接后,$HOME/.ssh目录中会出现一个套接字。该套接字在断开连接后持续一分钟。
Ansible 配置为重用本地套接字。
将其添加到您的ansible 配置文件中(例如,~/.ansible.cfg):
Host *
ControlMaster auto
ControlPath ~/.ssh/master-%r@%h:%p.socket
ControlPersist 1m
Run Code Online (Sandbox Code Playgroud)
%注意变量替换的双精度。
ssh user@server,并执行 2FA;步骤 2 必须在ControlPersist配置中执行,或者当您在另一个终端中启动 ansible 命令时,在终端中保持 ssh 连接。
您还可以在不需要时强制关闭连接,使用:ssh -O exit user@server。
请注意,如果您打开第三个终端并运行ssh user@server,则不会要求您提供凭据:将重新使用 1 中建立的连接。
有时,当您断开连接时,套接字仍然存在。每个进一步的连接都会挂起。您必须使用 手动断开此连接ssh -O exit user@server。这是该方法唯一已知的缺点。
ANSIBLE_SSH_CONTROL_PATH这是一个黑客,但您可以通过支持2fac的SSH连接隧道传输非2fac Ansible SSH连接.
我们将设置两个用户:ansible将是Ansible将使用的用户.它应该以Ansible支持的方式进行身份验证(即,不是2fac).此用户将受到限制,因此无法从任何地方进行连接127.0.0.1,因此无法从机器外部访问.
第二个用户ansible_tunnel将对外开放,但将通过两个因素进行身份验证,并且只允许将SSH连接隧道连接到本地计算机.
您必须只能为某些用户(并非所有用户)配置双因素身份验证.
ansible和ansible_tunnel~/.ssh/authorized_keys两个用户ansible_tunnel来/bin/false,或锁定用户-这将用于隧道专用,不运行命令将以下内容添加到/etc/ssh/sshd_config:
AllowTcpForwarding no
AllowUsers ansible@127.0.0.1 ansible_tunnel
Match User ansible_tunnel
AllowTcpForwarding yes
PermitOpen 127.0.0.1:22
ForceCommand echo 'This account can only be used for tunneling SSH sessions'
Run Code Online (Sandbox Code Playgroud)ansible_tunnel在运行Ansible之前,运行以下命令(在Ansible机器上,而不是目标):
ssh -N -L 8022:127.0.0.1:22 ansible_tunnel@<host>
Run Code Online (Sandbox Code Playgroud)
您将使用两个因素进行身份验证.
netstat),运行Ansible with ansible_ssh_user=ansible,ansible_ssh_port=8022和ansible_ssh_host=localhost.ansible_tunnel从外部连接,并且将使用两个因素进行身份验证8022本地计算机上的端口与连接到远程计算机上的sshd相同ansible只允许通过本地主机通过SSH进行连接,因此只允许通过隧道连接由于需要为每台机器打开一个单独的隧道,这需要手动操作,因此多个服务器无法很好地扩展.但是,如果您为服务器选择了双因素身份验证,那么您已经愿意采取一些手动操作来连接到每个服务器,而这个解决方案只会增加一些脚本包装的开销.
[已加入]
为方便起见,我们可能希望直接登录维护帐户进行一些手动操作,而无需完成设置隧道的过程.在这种情况下,我们可以将SSH配置为需要2fac身份验证,同时保持无需2fac通过隧道连接的能力:
# All users must authenticate using two factors
AuthenticationMethods publickey,keyboard-interactive
# Allow both maintenance user and tunnel user with no restrictions
AllowUsers ansible ansible_tunnel
# The maintenance user is allowed to authenticate using a single factor only
# when connecting from a local address - it should be impossible to connect to
# this user using a single factor from the outside (the only way to do that is
# having an existing access to the machine, or use the two-factor tunnel)
Match User ansible Address 127.0.0.1
AuthenticationMethods publickey
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
7054 次 |
| 最近记录: |