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

Tho*_*Lau 4 ansible

作为标题,在 root 上运行所有内容似乎并不安全,尤其是当 playbook 服务器被黑客入侵并且它可以 ssh 到 Ansible 主机列表上的任何机器时,这个安全问题的解决方案是什么?

Mic*_*ton 8

我专门为ansible的使用创建了一个用户,它可以使用无密码的sudo,但没有定义密码,需要ssh密钥才能登录。通过这种方式,该帐户具有特权,但如果没有 ssh 密钥,则无法远程访问。

或者,您可以使用密码创建 ansible 帐户,并且每次运行 ansible 时都需要 sudo 密码。

您可以像这样创建这样的用户:

# 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 ansible-runner@example.com" > /home/ansible/.ssh/authorized_keys

# Correct ownership of newly created files and directories
chown -R ansible.ansible /home/ansible/.ssh
Run Code Online (Sandbox Code Playgroud)

根据需要调整它以适应用于启动新服务器实例的任何过程(kickstart、preseed、cloud-init 等等)。

然后我设置了无ansible.cfg密码 sudo:

[defaults]
remote_user = ansible

[privilege_escalation]
become = True
become_method = sudo
become_user = root
become_ask_pass = False
Run Code Online (Sandbox Code Playgroud)

如果您希望需要 sudo 密码来运行剧本,您可以简单地become_ask_pass = True在 中设置ansible.cfg,而不是/etc/sudoers.d/ansible如上所示进行创建。