2016-08-10 72 views
4

我在使用Ansible時相當新,並且一直在閱讀here和谷歌,但還沒有找到答案。是否可以將Ansible authorized_key與多個鍵一起使用?

我的方案是我有一個服務器上的用戶,但需要放置在它的authorized_keys文件中的2-3個不同的酒吧鑰匙。

我可以成功地刪除所有密鑰,或與此腳本中添加的所有鍵:

--- 
    - 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有辦法做到這一點,我還沒有找到它。

有什麼辦法可以循環發佈pub文件並同時使用exclusive選項嗎?

回答

7

有沒有什麼辦法可以循環訪問pub文件並同時使用獨佔選項?

號有一個關於環路說明,並獨家在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

如果你保持你的用戶變量中,你可以使用此:

--- 

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

roles/users/vars/main.yml看起來是這樣的:

--- 

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

嘿,這是我的測試密鑰,其中相同的,只是一個不同的評論,然後Ansible只增加了最後一個:) – 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 
相關問題