You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Ansible变量文件中避免authorized_key重复,如何引用其他用户SSH密钥

解决Ansible变量中引用其他用户SSH密钥的问题

我来帮你搞定这个避免重复写SSH密钥的需求!在Ansible的vars/main.yml里直接用Jinja2表达式引用变量完全可行,只是你之前的语法用错了,下面给你几种靠谱的实现方式:

方法1:用selectattr+map过滤查找(无需额外依赖)

直接在user2的ssh_key里通过过滤器提取user1的密钥,这种方式不需要额外安装库,兼容性好:

# roles/manageuser/vars/main.yml
users:
  - username: user1
    ssh_key: "someExampleValidRSAPublicKEYValueInHereForAuthorizedKeys user1@localhost"
  - username: user2
    ssh_key: |
      someExampleValidRSAPublicKEYValueInHereForAuthorizedKeys user2@localhost
      {{ users | selectattr('username', 'equalto', 'user1') | map(attribute='ssh_key') | first }}
  • selectattr('username', 'equalto', 'user1'):从users列表中筛选出用户名是user1的条目
  • map(attribute='ssh_key'):提取该条目的ssh_key字段
  • first:取结果列表的第一个值(因为用户名唯一,只会有一个结果)

方法2:提前构建密钥字典(更清晰高效)

如果用户数量较多,建议把密钥单独存到一个字典里,再让users列表引用这个字典的值,结构更清晰,后续维护也方便:

# roles/manageuser/vars/main.yml
# 先定义所有用户的密钥字典
user_ssh_keys:
  user1: "someExampleValidRSAPublicKEYValueInHereForAuthorizedKeys user1@localhost"
  user2: |
    someExampleValidRSAPublicKEYValueInHereForAuthorizedKeys user2@localhost
    {{ user_ssh_keys.user1 }}

# 再定义用户列表,引用字典中的密钥
users:
  - username: user1
    ssh_key: "{{ user_ssh_keys.user1 }}"
  - username: user2
    ssh_key: "{{ user_ssh_keys.user2 }}"

方法3:用json_query(适合复杂查询场景)

如果你习惯JMESPath语法,可以用json_query过滤器,但需要确保你的Ansible环境安装了jmespath库(大部分现代Ansible版本默认自带):

# roles/manageuser/vars/main.yml
users:
  - username: user1
    ssh_key: "someExampleValidRSAPublicKEYValueInHereForAuthorizedKeys user1@localhost"
  - username: user2
    ssh_key: |
      someExampleValidRSAPublicKEYValueInHereForAuthorizedKeys user2@localhost
      {{ users | json_query('[?username==`user1`].ssh_key') | first }}

注意这里JMESPath的字符串要用反引号`包裹,避免和外层的双引号冲突。

关于你之前尝试的错误说明

  • query(users[?username=='user1'].ssh_key):query模块通常用于查找外部资源,不能直接在变量里这么用;如果要做JMESPath查询,应该用json_query过滤器
  • lookup('dict', ssh_key, users.username='user1'):lookup('dict')是用来遍历字典的,用法不符合你的场景,所以会失效

内容的提问来源于stack exchange,提问作者lonewolf

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.11 07:49:06