Я пытаюсь создать новых пользователей и заполнить их ~ /.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-ключи различных пользователей в каталог publickeys, который я поместил в переменную с именем "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
Любые идеи, что может пойти не так ? В общем, он должен работать, поскольку в Интернете можно найти подобных примеров . Я играл с форматом, но не могу заставить его работать. Мы ценим ваши указатели.
Причина сбоя в том, что фактический плагин называется 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') }}"
, и он работал нормально.