问题描述
在使用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的一致性,还可以更好地管理和控制每个密钥的配置。