В этой статье мы покажем, как с помощью Ansible добавить на удаленные Linux сервера пользователей и ваш публичный ключ для SSH аутентификации.
Предполагаем, что у вас уже установлен Ansible.
Создайте пользователя anscfg, который будет использоваться для удаленного управления:
# groupadd -g 2002 anscfg
# useradd -u 2002 -g 2002 -c "Automation Account" -s /bin/bash -m -d /home/anscfg anscfg
Предоставьте пользователю право sudo и задайте пароль:
# usermod -aG wheel anscfg
# passwd anscfg
Войдите по новым пользователем:
# su – anscfg
Создайте служебные каталоги:
$ mkdir -p {playbooks,scripts,templates}
Сгенерируйте пару SSH ключей:
$ ssh-keygen -t ed25519 -o -a 100 && ssh-keygen -t rsa -b 4096 -o -a 100
Добавьте в файл hosts адреса удаленных серверов, которыми вы будете управлять:
# nano /etc/hosts
192.168.31.21 nginx1 192.168.31.22 nginx2 192.168.31.23 nginx3
Теперь создайте файл с именами клиентов Ansible и добавьте ваши сервера:
# nano /home/anscfg/inventory
[webservers] nginx1 nginx2 nginx3
По умолчанию Ansible использует конфигурационный файл /etc/ansible/ansible.cfg. Мы создадим собственный файл конфигурации:
# nano /home/anscfg/.ansible.cfg
[defaults] inventory = /home/anscfg/inventory host_key_checking = False
- Обратите внимание на точку перед именем ansible.cfg. Она сообщает Ansible, что конфигурационный файлы нужно искать в домашней директории пользователя;
- Параметр host_key_checking = False запрещает Ansible выполнять запрос на добавлении клиентского сервера в known_hosts при запуске плейбука Ansible.
Создайте новый плейбук
# nano /home/anscfg/playbooks/useradd.yml
--- - hosts: webservers become: true tasks: - name: Create user anscfg user: name: anscfg password: <здесь нужно указать хэш пароля. Дело в том, что Ansible не позволяет использовать пароли в открытом виде. Проще всего получить хэш пароля с помощью python:: python -c 'import crypt; print crypt.crypt("1Passw0rrd22")' > shell: /bin/bash groups: wheel append: yes - name: Создать SSH ключ для anscfg в ~anscfg/.ssh/id_rsa user: name: anscfg generate_ssh_key: yes ssh_key_bits: 2048 ssh_key_file: .ssh/id_rsa - name: Добавить authorized key из файла id_rsa.pub authorized_key: user: anscfg state: present key: "{{ lookup('file', '/home/anscfg/.ssh/id_rsa.pub') }}"
Данный плейбук создаст на удаленном сервере пользователя anscfg с правами sudo, пару SSH ключей и установит публичный ключ.
Задайте права на файл:
$ chmod 644 /home/anscfg/playbooks/useradd.yml
Теперь можно запустить ваш плейбук:
$ ansible-playbook useradd.yml -u remote_user --ask-pass
После выполнения плейбука на удаленных хостах вы сможете подключиться к нему по SSH без пароля (с помощью закрытого ключа):
$ ssh nginx
Если вы хотите деплоить плейбуки без ввода пароля, можно добавить имя пользователя и пароль в файл inventory:
# nano /home/anscfg/inventory
[webservers] nginx1 ansible_ssh_user=anscfg ansible_sudo_pass=<PASS> nginx2 ansible_ssh_user=anscfg ansible_sudo_pass=<PASS> nginx3 ansible_ssh_user=anscfg ansible_sudo_pass=<PASS>
Не забудьте изменить права на файл inventory на 600.