首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >让用户和用户使用getent

让用户和用户使用getent
EN

Stack Overflow用户
提问于 2019-11-21 16:34:29
回答 1查看 2.6K关注 0票数 1

我是ansible的新手,请原谅。我没有从ansible文档中找到或可能理解相关信息。

我需要在系统(Debian 9)中的所有用户的. ssh /autorized_key中按块放置一些ssh键,而无需在任务中使用shell。Ansible 2.7.5

我的计划是:

  • 从passwd文件中获取所有用户;
  • 只选择非系统用户,例如,它可以是passwd中有/bin/bash的用户,也可以不是/usr/sbin/nologin /bin/false;
  • 将用户名和主页dir提取为变量;
  • 将其作为变量放到一个块文件模块中。

我正在尝试使用下面的getent模块从passwd文件中获取所有用户。

代码语言:javascript
复制
- getent:
    database: passwd
    key:
  register: allusers

# - debug:
#     var: allusers
# - debug:
#       msg: "{{ ansible_facts.getent_passwd }}"

# - name: Select actual users
#   set_fact:
#       passwd_user: "{{ item.key }}"
#       passwd_hdir: "{{ item.value.4 }}"
#   loop: "{{ allusers.ansible_facts.getent_passwd | dict2items }}"

- name: "Show file path only"
  debug:
    msg:
      - "Located user: {{ item.key }}"
      - "Home Dir: {{ item.value.4 }}"
  loop: "{{ allusers.ansible_facts.getent_passwd | dict2items }}"

这里我得到了一个键:用户和值: home dir。但我不知道如何按shell类型过滤它,以及如何将所有用户和那里的dirs分配给var。

代码语言:javascript
复制
- name: "Add ssh keys"
  blockinfile:
      path: "{{ passwd_hdir }}/.ssh/authorized_keys"
      create: yes
      owner: "{{ passwd_user }}"
      group: "{{ passwd_user }}"
      block: "{{ item }}"
  with_file:
    - "defaults/main.yml"  # file in role's dir with ssh-keys

我只为一个用户添加键。如何使用用户列表作为循环变量从该任务中创建一个循环。

附注:

问题的第二部分是如何处理变量结果: list、string、dict。我想我了解如何使用过滤器进行转换,但是我可以更多地阅读有关检测var类型的内容,并从中提取数据。我不清楚:variables.html

谢谢。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2019-11-21 17:18:14

问:“如何使用用户列表作为循环变量从该任务中创建一个循环。”

A:读读密码。变量getent_passwd将由模块getent自动创建。

代码语言:javascript
复制
- getent:
    database: passwd

通过选择包含shell /bin/bash的记录来创建用户my_users列表

代码语言:javascript
复制
- set_fact:
    my_users: "{{ getent_passwd|
                  dict2items|
                  json_query('[? contains(value,`/bin/bash`)].key') }}"

循环列表my_users并使用钥匙配置authorized_keys

代码语言:javascript
复制
- authorized_key:
    user: "{{ item }}"
    key: "{{ lookup('file', 'defaults/main.yml') }}"
  loop: "{{ my_users }}"

(未测试)

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/58979607

复制
相关文章

相似问题

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