我尝试为sftp用户设置chroot,以便他们可以按照ls -l
上的这篇文章查看用户/组名称。为此,我需要获得getent
命令的输出,并将其放入/chroots/{{ user.username }}/etc/passwd
文件中。
我尝试使用Ansible替换这个命令getent passwd sftpuser > /chroots/sftpuser/etc/passwd
,如下所示:
- 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”看起来如下:
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"}
getent_passwd
提供的值放入一个由":“连接的扁平字符串中,正确的方法是什么?key: "root"
代替echo "root:x:0:0:not really root:::" >> /chroots/sftpuser/etc/passwd
使用genent模块安全吗?getent passwd user1 user2
-它有可能提供两个键到ansible的getent模块吗?发布于 2017-11-18 23:06:28
将
getent_passwd
提供的值放入一个由":“连接的扁平字符串中,正确的方法是什么?
例如,将Jinja2模板与过滤器一起使用
- debug:
msg: "{{ user.username }}:{{getent_passwd[user.username]|join(':')}}"
您可以运行getent passwd user1 user2 --可以以某种方式为ansible的getent模块提供两个密钥吗?
不是的。要么一个人要么全部。
使用外部循环在第一种情况下请求值,或者在第二种情况下过滤结果列表。
https://stackoverflow.com/questions/47369170
复制相似问题