так - использования переменных.
Есть отдельная таска basic, которая генерирует sshd_config из j2 темплейта и в него помещает всех ssh пользователй и создает блоки конфига для sftp пользователей с разными ChrootDirectory.
Выглядит примерно так:
...
Subsystem sftp /usr/libexec/openssh/sftp-server
AllowUsers {{ ssh_users }}
{% for sftpuser in sftp_users %}
Match User {{ sftpuser }}
ChrootDirectory /home/nfs/{{ sftpuser }}/nfs
ForceCommand internal-sftp
AllowTcpForwarding no
...
Пользователи храняться в файле переменных, файл:
...
ssh_users: "user1 user2"
sftp_users:
- "sftpuser1"
- "sftpuser2"
...
Далее необходимо создать для этих пользователей sftp эти самые ChrootDirectory по шаблону типа:
/home/nfs/{{ sftpuser }}/nfs
И тут возникает проблема, как вытащить пользователей к примеру из того самого файла переменных из роли basic в отдельную роль sftp (почему роли разные - потому как nfs сервер с sftp пользователями отдельный и на всех серверах нет необходимости создавать такие каталоги), можно сделать релятивную симлинку для файла с переменными, но как их далее запихнуть в yml файл новой таски для sftp, которая собственно создает эти каталоги?
sftp.yml примерно должен иметь такой вид:
- name: Create recursive directories
file: path=/home/nfs/<USERNAME SFTP>/nfs owner=root group=root mode=0777
Что это позволит, идея в том, чтобы при добавлении нового пользователя sftp - редактировать только 1 файл vars и выполнять playbook с неким тегом.
ну если эти переменные у тебя не только для 1 роли, логично было бы вынести их в глобальные переменные, чтобы были доступны всем ролям
Обсуждают сегодня