this articleとしてls -l
のユーザー/グループ名を表示できるように、sftpユーザー用にchrootを設定しようとしています。このためには、getent
コマンドの出力を取得し、それを/chroots/{{ user.username }}/etc/passwd
ファイルに配置する必要があります。可能性:getentモジュールの出力を解析/連結する
私は次のようにこのコマンドgetent passwd sftpuser > /chroots/sftpuser/etc/passwd
を置き換えるためにAnsibleを使用しよう:
- 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
です":"で結合された1つのフラット文字列に変換しますか? - このように
key: "root"
のジェネリックモジュールをecho "root:x:0:0:not really root:::" >> /chroots/sftpuser/etc/passwd
の代わりに使用するのは安全ですか? - 実行可能
getent passwd user1 user2
- 何とか2つのキーをansibleのgetentモジュールに供給できますか?join
filterとJinja2のテンプレートを使用して、たとえば、