在我当前的环境中,所有 Linux 服务器只能通过启用了 MFA 的堡垒主机访问。
我已经设法让 Ansible 通过堡垒成功与服务器通信,唯一的问题是它为每个主机建立了到堡垒的新连接,这意味着我必须输入与服务器数量相同的 MFA 密钥。糟糕的时刻。 :(
我尝试在我的 ssh 配置中摆弄类似这样的内容以尝试使多路复用正常工作:
Host bastion
ControlMaster auto
ControlPath ~/.ssh/ansible-%r@%h:%p
ControlPersist 5m
不幸的是,它似乎没有这样做。有人能告诉我如何阻止 Ansible 通过我的堡垒主机为其接触的每个主机重新建立连接吗?
谢谢!
答案1
我刚刚偶然发现了这个关于使用堡垒主机运行 Ansible 的博客文章。
显然您需要将堡垒主机添加到控制主机ssh_config
:
Host 10.10.10.*
ProxyCommand ssh -W %h:%p bastion.example.com
IdentityFile ~/.ssh/private_key.pem
Host bastion.example.com
Hostname bastion.example.com
User ubuntu
IdentityFile ~/.ssh/private_key.pem
ControlMaster auto
ControlPath ~/.ssh/ansible-%r@%h:%p
ControlPersist 5m
编辑:ssh_args
ansible.cfg
[ssh_connection]
ssh_args = -F ./ssh.cfg -o ControlMaster=auto -o ControlPersist=30m control_path = ~/.ssh/ansible-%%r@%%h:%%p
这应该涵盖了bastion
配置的一部分。对于MFA
部分用户来说github 问题声称可以在 Ansible 中使用在 Ansible 之外打开的 ssh 会话。
我打开与具有 2FA 的主机的初始连接,然后在另一个窗口中运行如下命令:
ansible-playbook thing.yml --ssh-common-args='-o ControlPath=~/.ssh/connshare'
我手头没有堡垒主机设置,但我认为这个策略值得一试。