首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >使用Ansible中的authorized_key模块为用户定义分配多个公共ssh密钥

使用Ansible中的authorized_key模块为用户定义分配多个公共ssh密钥
EN

Stack Overflow用户
提问于 2019-10-05 15:33:08
回答 1查看 1K关注 0票数 2

问题:

使用Ansible,如何设置多个公钥文件(.pub)部署在用户的authorized_keys文件中,而不是使用包含公共ssh键列表的单个文件?

场景和需求:

  • I有多个公共ssh-密钥存储在中央位置的
  • 上,希望从vars文件
  • 中创建新用户,每个用户都应该拥有(无/一个特定/多个)公共ssh--从部署到其各自authorized_keys文件H 216H 117.pub文件的选择中获得的密钥可能会由于以下原因而改变:F 119H 120 .pub文件的内容因eg而发生变化。已泄露的私钥assigned

  • 用户在vars文件中应有额外的公钥文件

  • 我不想为每个用户看一个“列表”文件来替换一个键

当前部署的

vars (vars/users.yml):

代码语言:javascript
复制
users:
  - username: "bob"
    sshkey: "{{ lookup('file', 'files/ssh_keys/bob.keys') }}"
    ...
  - username: "alice"
    sshkey: "{{ lookup('file', 'files/ssh_keys/alice.keys') }}"
    ...

bob.keys含量

代码语言:javascript
复制
ssh-rsa admin-ssh-key= admin
ssh-rsa support-a-ssh-key= support-a
ssh-rsa bobs-ssh-key= hi im bob

alice.keys含量

代码语言:javascript
复制
ssh-rsa admin-ssh-key= admin
ssh-rsa alice-ssh-key= hi im alice
ssh-rsa accounting-clerk-ssh-key= checking your progress

ansible角色main.yml文件:

代码语言:javascript
复制
 - name: Add SSH keys
  authorized_key:
    user: "{{ item.username }}"
    state: "{{ item.sshkeystate }}"
    key: "{{ item.sshkey }}"
    exclusive: yes
  with_items: "{{ users }}"
  tags: [add ssh keys]

问题场景:

  • support-a's ssh密钥被泄露,所有在authorized_keys文件中拥有该公钥的用户都需要通过authorized_keys文件替换新的公钥
  • to (sed),并用新的

替换已泄漏的公钥。

我试过:

vars档案:

代码语言:javascript
复制
users:
  - username: "bob"
  sshkey:
    - "{{ lookup('file', 'files/ssh_keys/admin.pub') }}"
    - "{{ lookup('file', 'files/ssh_keys/support_a.pub') }}"
    - "{{ lookup('file', 'files/ssh_keys/bob.pub') }}"
  ...
  - username: "alice"
  sshkey:
    - "{{ lookup('file', 'files/ssh_keys/admin.pub') }}"
    - "{{ lookup('file', 'files/ssh_keys/alice.pub') }}"
    - "{{ lookup('file', 'files/ssh_keys/accounting_clerk.pub') }}"

但是,在执行ansible角色:"msg": "invalid key specified: ['ssh-rsa admin-ssh-key= admin', 'ssh-rsa support-a-ssh-key= support-a', 'ssh-rsa bobs-ssh-key= hi im bob']"时,我得到了这个错误

我也尝试了类似于这个( https://stackoverflow.com/a/54079374 )解决方案的东西,但是我想场景和需求有点不同,而且在我的场景中没有selectattr() (我认为)。

有人能指点我怎么解决这个问题吗?还是我走错了方向?干杯。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2019-10-05 18:29:24

据我所知,您的剧本中唯一不同于您链接的部分是"\n".join()部分,它将列表折叠成一个文本块。正如ansible正确指出的那样,您正在向期望使用list[str]的属性提供一个str

我不相信您的情况--您需要使用selectattr或任何筛选,因为您一直想要所有的密钥。因此:

代码语言:javascript
复制
- name: Add SSH keys
  authorized_key:
    user: "{{ item.username }}"
    state: "{{ item.sshkeystate }}"
    key: '{{ item.sshkey | join("\n") }}'
    exclusive: yes
  with_items: "{{ users }}"
  tags: [add ssh keys]
票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/58249792

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档