使用Ansible管理具有不同每个密钥选项的多个SSH密钥

80次阅读
没有评论

问题描述

在使用Ansible时,希望能够使用ansible.builtin.authorized_key模块来管理多个SSH密钥,每个密钥都具有不同的选项。该模块提供了一些功能,比如:
– 你可以设置exclusive: true来删除所有其他密钥。
– 你可以设置key_options: ...
– 你可以在key字段中用换行符分隔来列出多个密钥。

用户想知道是否有一种方法可以将上述所有功能结合起来,同时避免对所有密钥应用相同的选项。

另外,用户还提到了一种方法,即使用多个authorized_keys文件来实现,但他不确定是否有更好的解决方案。

解决方案

请注意以下操作可能涉及版本差异,使用前做好备份。

最佳解决方案

在Ansible中,你可以通过在多行的key字段中包含密钥选项来实现每个密钥具有不同选项的目标。这样,你不需要为每个密钥都设置key_options,而是将选项直接包含在密钥定义中。这样做的好处是,ansible.builtin.authorized_key模块会解析密钥内容,如果解析失败,会在部署之前报错,这有助于确保密钥内容的正确性。

以下是一个示例,展示如何在Ansible中实现这一目标:

- name: Manage SSH authorized keys
  ansible.builtin.authorized_key:
    user: your_username
    state: present
    key: |
      ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQC3JhUz... key_options="option1=value1"
      ssh-rsa BBBB3NzaC1yc2EAAAADAQABAAABAQC9KlUx... key_options="option2=value2"
      # 添加更多密钥...

在上面的示例中,我们使用key字段,通过使用|符号开头,将多行密钥定义包含在内。每个密钥定义都包括密钥本身以及对应的选项。通过这种方式,你可以实现每个密钥具有不同选项的目标。

备选方案

另一种方法是使用多个authorized_keys文件,但这可能不是最优解决方案,因为在sshd配置中使用多个文件可能会导致一些问题。你可以在sshd配置中指定多个AuthorizedKeysFile来引用不同的文件,但请注意这可能会影响到SSH的行为。以下是一个示例sshd配置:

AuthorizedKeysFile     .ssh/authorized_keys .ssh/authorized_keys2 .ssh/authorized_keys_custom

总之,最佳解决方案是在Ansible的key字段中包含密钥选项,以实现每个密钥具有不同选项的目标。这样做不仅可以保持Ansible的一致性,还可以更好地管理和控制每个密钥的配置。

正文完