最乏味的管理任务之一可以是管理用户密钥。 虽然诸如ssh-copy-id之类的工具可以很容易地将密钥复制到单个服务器,但将它们复制到几百甚至几千台服务器可能会更高。 Ansible使此任务异常简单,并允许您在需要确保为大型服务器区域内的用户删除访问时批量撤销密钥.
准备您需要为此配方使用的只是配置的Ansible控制节点和描述目标节点的Ansible清单。 您还应该拥有一个SSH密钥,包括您希望管理的公钥和私钥.
怎么做让我们使用SSH密钥来管理Ansible:
- 我们可能要做的第一件事是创建一个用户并同时为他们创建一个密钥。 如果您使用网络跳转框,这尤其有用,因为这意味着您不依赖于提供密钥的用户; 它是整个过程中不可或缺的一部分。 运行以下命令以使用关联键创建名为Meg的用户:
ansible all -m user -a "name=meg generate_ssh_key=yes"
- 通常,用户要么拥有他们希望使用的现有密钥,要么需要更改已安装的密钥。 以下命令允许您将密钥附加到指定的帐户。 这假定您的密钥位于工作目录中名为keys的目录中,您可以从该目录运行以下命令:
ansible all -m copy -a "src=keys/id_rsa dest="/home/beth/.ssh/id_rsa mode=0600
- 一旦用户设置了私钥,您需要将他们的公钥推送到他们希望访问的每个服务器。 以下命令将我的公钥添加到Ansible清单中定义的所有Web服务器。 这使用查找Ansible函数来读取本地密钥并将其发送到远程节点:
ansible web_servers -m authorized_key -a "user=michael key="{{ lookup('file', '/home/michael/.ssh/id_rsa.pub') }}" 其他
前面的示例使用Ansible模块的混合来实现最终结果。 您可以在以下位置找到以下模块的文档:
- User module: http://docs.ansible.com/user_module.html
- Copy module: http://docs.ansible.com/copy_module.html
- Authorized_key module: http://docs.ansible.com/authorized_key_module.html