如何通过 ansible 机器[主]认证?



我正在学习 ansible,我尝试使用 ansible 来制作 4-5 台服务器。我正在手动将公钥复制到机器上。

  • 我想知道如果我们必须为 1000 个这样做会是什么情况 服务器数量?

就像我们应该做同样的事情,为另一个团队提供SSH公钥并要求他们将其添加到他们的机器中吗?还有其他选择吗?业内人士是如何处理的?

蒂亚

不,如果您正在管理大量服务器,则在每个服务器中配置SSH密钥不是一个好方法。如果我们谈论的是云上的服务器,它们本质上是高度动态的,即,它们在需要时启动/终止。

您始终可以在 Ansible 主配置上配置用于 SSH 连接的"远程用户"。 除此之外,您还可以在任何地方配置用户剧本或角色,或作为命令行参数传递。

对于使用SSH密钥连接到远程服务器,可以使用相同的方法。

例如:从命令行:

ansible-playbook <playbook yml> -u <user name on remote host> --key-file <SSH key file name with path on master host>
ansible-playbook abc.yml -u "user1" --key-file "/u01/ansible_keys/user1_key.pem"

您也可以在清单文件中设置这些密钥,如下所示:

myHost ansible_ssh_private_key_file=~/.ssh/mykey1.pem
myOtherHost ansible_ssh_private_key_file=~/.ssh/mykey2.pem

参考 : 在 ansible 剧本文件中指定 ssh 密钥

1.如果所有计算机的密码都相同。

ansible -i <inventory_file> -m copy -a "src=<public_key_filepath> dest=<target_filepath> -k"

输入密码以将公钥复制到所有计算机,并像以前一样使用ansible

2.如果所有机器的大部分密码相同。您可以在库存中执行此操作。

[groupA]
machine01
machine02
[groupB]
machine03
machine04 ansible_ssh_pass=<different password from others>
[all:vars]
ansible_ssh_user=<ssh_useranme>
ansible_ssh_pass=<machine password>

然后(不需要输入密码(

ansible -i <inventory_file> -m copy -a "src=<public_key_filepath> dest=<target_filepath>"

然后删除库存文件中的密码,并像以前一样使用 ansible

就我自己而言,我更喜欢方法 2,因为我拥有所有机器的 root 密码,没有人可以使用 root 帐户登录机器。所以我在根目录中写明文密码。但我认为您的公钥方法可能更安全。