首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >Ansible: getent模块的解析/连接输出

Ansible: getent模块的解析/连接输出
EN

Stack Overflow用户
提问于 2017-11-18 17:46:16
回答 1查看 2.8K关注 0票数 0

我尝试为sftp用户设置chroot,以便他们可以按照ls -l上的这篇文章查看用户/组名称。为此,我需要获得getent命令的输出,并将其放入/chroots/{{ user.username }}/etc/passwd文件中。

我尝试使用Ansible替换这个命令getent passwd sftpuser > /chroots/sftpuser/etc/passwd,如下所示:

代码语言:javascript
运行
复制
- name: get {{ user.username }} user info
  getent:
    database: passwd
    key: "{{ user.username }}"

- debug:
    var: getent_passwd

- name: create /chroots/{{ user.username }}/etc/passwd file
  lineinfile:
    path: /chroots/{{ user.username }}/etc/passwd
    line: "{{ getent_passwd | from_json }}"
    state: present
    create: yes
    owner: root
    group: root
    mode: '0644'

“getent_passwd”看起来如下:

代码语言:javascript
运行
复制
ok: [cf1] => {
    "getent_passwd": {
        "testuser1": [
            "x", 
            "1001", 
            "1002", 
            "", 
            "/home/testuser1", 
            "/usr/sbin/nologin"
        ]
    }
}

但是我得到了一个错误:FAILED! => {"failed": true, "msg": "Unexpected templating type error occurred on ({{ getent_passwd | from_json }}): expected string or buffer"}

  1. getent_passwd提供的值放入一个由":“连接的扁平字符串中,正确的方法是什么?
  2. key: "root"代替echo "root:x:0:0:not really root:::" >> /chroots/sftpuser/etc/passwd使用genent模块安全吗?
  3. 一个人可以运行getent passwd user1 user2 -它有可能提供两个键到ansible的getent模块吗?
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2017-11-18 23:06:28

getent_passwd提供的值放入一个由":“连接的扁平字符串中,正确的方法是什么?

例如,将Jinja2模板与过滤器一起使用

代码语言:javascript
运行
复制
- debug:
    msg: "{{ user.username }}:{{getent_passwd[user.username]|join(':')}}"

您可以运行getent passwd user1 user2 --可以以某种方式为ansible的getent模块提供两个密钥吗?

不是的。要么一个人要么全部。

使用外部循环在第一种情况下请求值,或者在第二种情况下过滤结果列表。

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

https://stackoverflow.com/questions/47369170

复制
相关文章

相似问题

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