Если вам необходимо обновить ключи доступа и пароли на многих серверах (например, ушел какой-либо сотрудник у которого был доступ к каким-то серверам, либо просто в целях безопасности обновить надо, либо для CI, вариантов куча), то можно использовать для этого Ansible.
Создайте директорию public_keys/
, где будете хранить ваш ключ и ключи ваших сотрудников. Добавьте туда все необходимые ключи, например:
Файл public_keys/crusat
:
ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQDDVk9yuKpN/c1+TsM3i0YW5H1Z86dVZQvAkOAxF3VZMIS48Ng6JjTOx58/kf5Z1fjNVcxNWv0uyrARstgZTokWiNfeHGYyMR+htivsJnFHiG6i1OXUdRAfNh84EXPm0LZbvzcRm9MM36nsa5cNS4dGE8ZxObW29O....
Со всеми остальными проделайте то же самое.
Теперь создадим плейбук set_access.yml
(обратите внимание на обращение к ключам из public_keys
- эти ключи будут добавлены, адаптируйте под себя):
---
- hosts: all
remote_user: root
vars_files: ['credentials.yml']
tasks:
- name: Set main authorized key and remove existent
authorized_key:
user: root
state: present
key: '{{ item }}'
exclusive: True
with_file:
- ./public_keys/crusat
- name: Set up other keys
authorized_key:
user: root
state: present
key: '{{ item }}'
with_file:
- ./public_keys/user1
- ./public_keys/user2
- name: Set root password
user:
name: root
state: present
update_password: always
password: "{{ admin_default_password }}"
shell: /bin/bash
Теперь надо сделать возможность задания входа по паролю (см. последнюю задачу в ansible - можно задавать для разных пользователей, просто скопируйте, сколько необходимо).
Для этого создадим файл set_access.sh
:
#!/bin/bash
NEW_PASSWORD='mysuperpassword'
HASHED_PASSWORD=`python3 -c 'import crypt; print(crypt.crypt("'"$NEW_PASSWORD"'", crypt.mksalt(crypt.METHOD_SHA512)))'`
echo 'admin_default_password: '$HASHED_PASSWORD > ./credentials.yml
ansible-playbook -i inventory_hosts -l test ./set_access.yml
Здесь укажите правильный путь к инвентарю. Суть в следующем - скрипт берет пароль, хэширует его, помещает в файл credentials.yml
и затем выполняет плейбук, который как раз возьмет хэшированный пароль как переменную и задаст необходимый пароль для пользователя root
.