Я пытаюсь создать новых пользователей и заполнить их файл ~ / .ssh / authorized_keys с помощью Ansible. Вот моя задача:
- 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-ключи различных пользователей в каталог публичных ключей, который я поместил в переменную с именем «sshkey_path». Для каждого пользователя существует один файл открытого ключа (например, jdoe.pub).
Когда я запускаю playbook, создание учетной записи пользователя идет нормально, но часть 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
Есть идеи, что может пойти не так? В принципе должно работать как есть похожие примеры найдено в Интернете. Я играл с форматом, но не могу заставить его работать. Ваши указатели ценятся.
Для потомков:
Наряду с ошибкой, отмеченной "linuxdynasty" относительно with_items
, возникла еще одна ошибка в способе ссылки на файл ключа.
Я пробовал использовать следующий синтаксис:
key="{{ sshkey_path }}/{{ item.username }}.pub"
Но в данном случае это не сработает, потому что authroized_key
ожидает файл. Чтобы получить это, нужно использовать «with_files» или «Поиск».
Чтобы он работал в моей ситуации, мне пришлось объединить несколько переменных вместе, что я и сделал с помощью этого Переполнение стека Почта. Последний синтаксис, который я придумал, был:
key="{{ lookup('file', sshkey_path+item.username+'.pub') }}"
и он работал нормально.
Причина сбоя в том, что сам плагин называется with_items а не with_item. Вы забыли s.