2016-08-10 6 views
4

나는 Ansible을 사용하는 데 상당히 익숙하며 here와 google을 읽고 아직 답변을 찾지 못했습니다.복수 키와 배타적 인 Anonymous authorized_key를 사용할 수 있습니까?

필자의 시나리오는 서버에 1 명의 사용자가 있지만 authorized_keys 파일에 넣어야하는 2-3 개의 서로 다른 pub 키가 있다는 것입니다.

나는 성공적으로 모든 키를 제거하거나이 스크립트를 모든 키를 추가 할 수 있습니다

--- 
    - hosts: all 

tasks: 
    - name: update SSH keys 
    authorized_key: 
    user: <user> 
    key: "{{ lookup('file', item) }}" 
    state: present 
    #exclusive: yes 
    with_fileglob: 
     - ../files/pub_keys/*.pub 

그것을 읽고 모든 키를 추가 present 플래그를. absent 플래그를 사용하면 나열된 모든 키가 제거됩니다.

문제는 서버에만있는 이전 키를 제거하고 덮어 쓰고 향후 배포를 위해 서버에있을 수있는 제 무작위 키를 덮어 쓰는 것입니다.

플래그가 exclusive 인 경우 마지막 키만 가져 와서 추가합니다. 루프가 반복적으로 모든 키를 추가하면 이것은 환상적입니다. 이걸 Ansible에서 할 방법이 있다면 그것을 찾지 못했습니다.

펍 파일을 반복 처리하고 동시에 exclusive 옵션을 사용할 수 있습니까?

답변

7

펍 파일을 반복 처리하고 동시에 독점 옵션을 사용할 수 있습니까? docs에서 루프에 대한주의와 배타적이 있습니다

번호 :

독점 :의 authorized_keys 파일에서 다른 모든 비 지정된 키를 제거할지 여부. 하나의 키 문자열 값에 개행으로 구분하여 여러 개의 키를 지정할 수 있습니다. 이 옵션은 루프를 인식하지 않으므로 with_를 사용하면 루프의 반복마다 배타적입니다. 파일에 여러 개의 키가 있으면 위에서 설명한대로 단일 키를 모두 전달해야합니다.

그래서 모든 키를 가입하고 한 번에 모두 보내야합니다. 이 같은
뭔가 :

- name: update SSH keys 
    authorized_key: 
    user: <user> 
    key: "{{ lookup('pipe','cat ../files/pub_keys/*.pub') }}" 
    state: present 
    exclusive: yes 

점검 생산 실행하기 전에이 코드!

+0

오, 당신은 생명의 은인입니다! 위대한 작품! 방금 조회 항목을 발견했지만 이해하려고했습니다. 고마워요! – Valien

1

당신의 킵 변수 내부 사용자는이를 사용할 수있는 경우 : roles/users/vars/main.yml은 다음과 같습니다

--- 

- hosts: all 
    vars_files: 
    - roles/users/vars/main.yml 
    tasks: 
    - name: Allow other users to login to the account 
     authorized_key: 
     user: user_name 
     exclusive: yes 
     key: "{{ developers|map(attribute='publish_ssh_key')|join('\n') }}" 

:

--- 

developers: 
    - name: user1 
    publish_ssh_key: ssh-rsa AAAA... 
    - name: user2 
    publish_ssh_key: ssh-rsa AAAA... 
+0

마지막 키만 추가하지만 문서에 따르면 "단일 키 문자열 값으로 개행으로 구분하여 여러 키를 지정할 수 있습니다."http://docs.ansible.com/ansible/authorized_key_module.html 왜 고장 났는지 알아? – goetzc

+0

@goetzc 잘 모르겠다. :-( – czerasz

+0

이봐, 테스트 키를 가진 곳은 똑같은데, 그냥 다른 주석을 달았고, Anabilities는 마지막 하나만 덧붙였다. :) – goetzc

0

당신은 예를 들어 pipe 조회를 (피하려면 때문에 경로가 역할과 관련이 없음) filefileglob 조회 :

의 조합을 사용할 수도 있습니다.
- name: update SSH keys 
    authorized_key: 
    user: <user> 
    key: "{% for key in lookup('fileglob', 'pub_keys/*.pub').split(',') %}{{ lookup('file', key) ~ '\n'}}{% endfor %}" 
    state: present 
    exclusive: yes