Ansible
ansible all -m ping <опросить все хосты в "ansible/hosts">
ansible-playbook < путь к файлу(/etc/ansible/play.yml)> -< ключи >
-l == --limit < установить только в группе или хосте(можно ip)>
ansible-playbook play.yml -l 10.0.0.1 <nginx>
ssh-keygen -t rsa
ssh-copy-id -i ~/.ssh/id_rsa.pub <удаленный пользователь, чей пароль будет запрощен>@<удаленный хост(DNSname или ip)>
/etc/ansible/ansible.cfg
host_key_checking = False < отключить проверку по ключу>
---
- hosts: '{{ hosts }}'
vars_files:
- '{{ vars }}'
roles:
- { role: authorized_keys }
ssh_users:
- name: pupkin
key: "{{ lookup('file', 'roles/authorized_keys/vars/pupkin.pub') }}"
servers:
- host1
- host2
state: present
- name: root
key: "{{ lookup('file', 'roles/authorized_keys/vars/guru.pub') }}"
servers:
- host1
- host2
state: present
- name: root
key: "{{ lookup('file', 'roles/authorized_keys/vars/user.pub') }}"
servers:
- host3
- host4
state: absent
и добавить условие в roles/authorized_keys/tasks/main.yml:
- name: Add ssh key.
authorized_key: user="{{ item.name }}" key="{{ item.key }}" state="{{ item.state }}"
when: "inventory_hostname in item.servers"
with_items: "{{ ssh_users }}"
при этом само собой имена перечисленные в servers должны совпадать с тем что написано в inventory
$ ssh-keygen -t rsa
В результате в каталоге /home/vasya/.ssh будут созданы файлы ключей:
$ ~/.ssh$ ls -1
id_rsa
id_rsa.pub
Если предполагается, что команды Ansible будут выполняться под пользователем root удаленной машины, то пользователь vasya должен уметь заходить на удаленную машину как root по ssh. Чтобы можно было это делать без постоянного ввода пароля, нужно под пользователем vasya выполнить следующую команду:
$ ssh-copy-id -i ~/.ssh/id_rsa.pub root@remoteHost
Тож глянуть
Добавляем секцию test и добавляем ip адреса наших серверов:
[test]
192.168.0.1
192.168.0.2
................
Собираем ssh ключи всех пользователей и складываем в файлы.
Например ключи всех пользователей, которые будут работать под root - в файл root.pub и тд.
Создаем сценарий для ansible:
----- файл ssh_key.yml -----
# да, начало такое :)
---
# Означает, что буду использоваться сервера из секции [test] файла hosts
- hosts: test
tasks:
- authorized_key:
# ключи добавятся пользователю root ...
user: root
state: present
# ... из нашего файла root.pub
key: "{{ lookup('file', '/home/vladimir/utils/ansible/keys/root.pub') }}"
----- файл ssh_key.yml -----
Для других пользователей и файлов с ключами добавляем еще одну секцию:
- authorized_key:
# Меняем на нужного - user:
user: root
state: present
# Указываем путь к файлу с ключами
key: "{{ lookup('file', '/home/vladimir/utils/ansible/keys/key.pub') }}"