2017-11-18 14 views
0

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"}

  1. getent_passwd에 의해 제공된 값을 얻는 적절한 방법은 무엇입니까? ":"로 결합 된 하나의 편평한 문자열로?
  2. echo "root:x:0:0:not really root:::" >> /chroots/sftpuser/etc/passwd 대신 key: "root"이있는 젠털 모듈을 사용하는 것이 안전합니까?
  3. 하나를 실행할 수 있습니다 getent passwd user1 user2 - 어떻게 든 2 개의 키를 무언가의 getent 모듈에 제공 할 수 있습니까? join filter와 Jinja2 템플릿을 사용하여 예를 들어

답변

1

What is the proper way to get those values supplied by getent_passwd into one flat string joined by ":"?

:

- debug: 
    msg: "{{ user.username }}:{{getent_passwd[user.username]|join(':')}}" 

One can run getent passwd user1 user2 - is it possible to supply two keys to the ansible's getent module somehow?

호 어느 하나의 하나 또는 모든.

첫 번째 경우에는 값을 요청하거나 두 번째 경우에는 결과 목록을 필터링하려면 외부 루프를 사용하십시오.