Ansible是否必须在节点和Ansible playbook服务器之间共享根密钥?

作为标题,在root上运行所有的东西似乎并不安全,特别是当playbook服务器被黑掉,并且可能ssh进入Ansible主机列表中的任何机器时,这个安全问题的解决scheme是什么?

我创build了一个专门用于使用ansible的用户,它可以使用无密码的sudo,但是没有定义的密码,并且需要ssh密钥才能login。 通过这种方式,该帐户是有特权的,但不能在没有ssh密钥的情况下远程访问。

或者,您可以使用密码创build一个安全的账户,并且每次运行时都需要inputsudo密码。

你可以像这样创build一个这样的用户:

# Create user adduser ansible # Lock password preventing password login (optional) passwd -l ansible # Expire any existing password, preventing password login (optional) chage -E 0 ansible # Ensure ansible can sudo without a password (optional) echo "ansible ALL=(ALL) NOPASSWD:ALL" > /etc/sudoers.d/ansible # Create ansible's .ssh directory mkdir -m 700 /home/ansible/.ssh # Insert your desired SSH keys here echo "ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIB7/BSV84tCEQ8SSwygqjEVPFcH+G2JSFEdyuJI7A2iG [email protected]" > /home/ansible/.ssh/authorized_keys # Correct ownership of newly created files and directories chown -R ansible.ansible /home/ansible/.ssh 

根据需要将其适用于任何用来创build新服务器实例的过程(kickstart,preseed,cloud-init,不pipe)。

然后, ansible.cfg为无密码的sudo设置ansible.cfg

 [defaults] remote_user = ansible [privilege_escalation] become = True become_method = sudo become_user = root become_ask_pass = False 

如果你想要一个sudo密码来运行剧本,你可以简单地在ansible.cfg设置become_ask_pass = True ,而不要像上面那样创build/etc/sudoers.d/ansible

[]当剧本服务器被黑客攻击,并可能ssh进入Ansible主机列表中的任何机器,这个安全问题的解决scheme是什么?

这个安全问题没有解决办法

如果执行剧本的机器受到危害,则本机pipe理的服务器也应该被认为是受到威胁的。

改写:执行Ansible剧本的机器必须满足服务器本身的安全要求。


这适用于用于pipe理服务器的任何机器。

如果用于pipe理目的的工作站遭到破坏 ,那么在该工作站上执行的任何程序以及使用合法凭证连接到服务器的程序都可能被恶意程序代替。

而且该恶意代码可以使用“真诚”提供的凭证对受pipe理的服务器执行任何操作。

而且,使用Ansible会带来额外的风险,如下所示:

  1. Ansible代码本身通常在用户空间中维护(比如使用普通帐户的pip install ansible ,或者虚拟env) – 对于攻击者来说,甚至不需要在工作站上获得更高的权限来更改Ansible代码以执行任意代码以隐形的方式(因为每次执行Ansible时,pipe理员都不会validationAnsible Python的代码)。

  2. 由Ansible执行的需要提升权限的命令不能在pipe理服务器上的sudoers显式指定(即Ansible要求启用ALL命令)。


由服务器和pipe理工作站组成的系统的安全性与最薄弱环节的安全级别一样高。