Ssh-Keys

Ansible 中的 authorized_keys 和 with_items

  • July 26, 2016

我正在嘗試使用 Ansible 創建新使用者並填充他們的 ~/.ssh/authorized_keys 文件。這是我的任務:

- name: Create user account
 user: name="{{ item.username }}-ns" comment="{{ item.realname }}"
   groups=adm,sudo, append=yes
   password="{{ item.password }}"
 with_items: "{{ ssh_users }}"
- name: copy ssh keys to authorized_keys
 authorized_key:  user="{{ item.username }}-ns"
   key="{{ sshkey_path }}/{{ item.username }}.pub"
 with_item: "{{ ssh_users }}"

我的變數文件如下所示:

ssh_users:
 - username: "jdoe"
   realname: "jrow"
   password: "$6$FWhXrnkizCqwKJcM$y55ETlvthHA49NuzwYgKAmOTnsBDRzfXE1OiOuJ.HHwVuI4P/BQrR/eKgYOioevIrgYYw.HpeP/sxCR3M38SW/"
 - username: "jroe"
   realname: "Jane Roe"
   password: "$6$wQhvxq3C.egKzrGi$na0M4jn3bi1lM2dz2YvdbAvvJBvbg4iGH1K6j7sHnZZt7mZggexHPvxOT799pfaDKmU6xDrbtbrLsxviGyABA0"
 - username: "testuser"
   realname: "Test User"
   password: "$6$U24oz4dsfdYD/LZ$fuziBEkc2q/POHSEvfcuTaD6wFTF.49RbU8z8JLQk3oki/He87cYqpSZtL16A11EBaG6VdemXdy6\V/"

我已將各種使用者的公共 ssh 密鑰設置到一個 publickeys 目錄中,我將其放入名為“sshkey_path”的變數中。每個使用者都有一個公鑰文件(例如 jdoe.pub)。

當我執行劇本時,使用者帳戶創建正常,但 authorized_keys 部分說:

ERROR! 'with_item' is not a valid attribute for a Task

The error appears to have been in 'user-add.yaml': line 29, column 7, but may
be elsewhere in the file depending on the exact syntax problem.

The offending line appears to be:


   - name: copy ssh keys to authorized_keys
     ^ here

有什麼想法可能會出錯嗎?原則上,它應該可以工作,因為在網上找到了類似的例子。我玩過這種格式,但無法讓它發揮作用。感謝您的指點。

它失敗的原因是因為實際的外掛被稱為with_items而不是 with_item。你忘了s。

為後代:

除了“linuxdynasty”指出的關於的錯誤外with_items,我引用密鑰文件的方式還有一個錯誤。

我嘗試使用以下語法:

key="{{ sshkey_path }}/{{ item.username }}.pub"

但這在這種情況下不起作用,因為authroized_key需要一個文件。必須使用“with_files”或查找來獲得此資訊。

為了使它在我的情況下工作,我必須將多個變數連接在一起,這是我在這篇StackOverflow文章的幫助下完成的。我想出的最終語法是:

key="{{ lookup('file', sshkey_path+item.username+'.pub') }}"

它工作得很好。

引用自:https://serverfault.com/questions/791889