Ansible – система управления конфигурациями, написанная на Python, которая позволяет выполнять управление и настройку удалённых серверов с одного хоста.
Ближайшая аналогия – Puppet.
Для установки Ansible из репозитория – потребуется добавить репозиторий Epel.
Находим пакет Ansible:
# yum search ansible ... ansible-lint.noarch : Best practices checker for Ansible ansible-inventory-grapher.noarch : Creates graphs representing ansible inventory ansible.noarch : SSH-based configuration management, deployment, and task execution system
Устанавливаем:
# yum install ansible ... Installed: ansible.noarch 0:1.8.4-1.el6 Dependency Installed: PyYAML.i686 0:3.10-3.1.el6 libyaml.i686 0:0.1.3-4.el6_6 python-babel.noarch 0:0.9.4-5.1.el6 python-crypto.i686 0:2.0.1-22.el6 python-crypto2.6.i686 0:2.6.1-2.el6 python-httplib2.noarch 0:0.7.7-1.el6 python-jinja2.i686 0:2.2.1-2.el6_5 python-keyczar.noarch 0:0.71c-1.el6 python-paramiko.noarch 0:1.7.5-2.1.el6 python-pyasn1.noarch 0:0.0.12a-1.el6 python-setuptools.noarch 0:0.6.10-3.el6 python-simplejson.i686 0:2.0.9-3.1.el6 Complete!
Можно установить используя PIP:
# pip install ansible
Настройки удалённых хостов хранятся в файле /etc/ansible/hosts
.
Бекапим его:
# mv /etc/ansible/hosts /etc/ansible/hosts.default
Создаём заново, и добавляем сервер cent1
, который будет находится в группе test box
, и группу local
– для машины, на которой работает сам Ansible, с именем cent1
:
[test box] cent2 [local] cent1
Оба хоста добавлены в /etc/hosts
:
# grep -E "cent1|cent2" /etc/hosts 10.***.***.250 cent2 127.0.0.1 cent1
Работа Ansible с удалёнными серверами по умолчанию предполагает, что у вас имеется настроенное SSH-подключение с авторизацией по RSA-ключам.
На сервере с Ansible переключаемся на пользователя, под которым будем выполнять подключение:
# su -l setevoy
Создаём RSA-ключ:
$ ssh-keygen -t rsa Generating public/private rsa key pair. Enter file in which to save the key (/home/setevoy/.ssh/id_rsa): Created directory '/home/setevoy/.ssh'. Enter passphrase (empty for no passphrase): Enter same passphrase again: Your identification has been saved in /home/setevoy/.ssh/id_rsa. Your public key has been saved in /home/setevoy/.ssh/id_rsa.pub. The key fingerprint is: 30:43:ca:a8:2f:0d:a8:eb:af:c7:d9:95:d9:43:77:01 setevoy@cent1 The key's randomart image is: +--[ RSA 2048]----+ | . E. | | o o . | | . o + . | |.. + . . . | |+ S . . | |.+ + o | |o + o . . | | o + . | |oo+. | +-----------------+
На удалённом сервере – включаем авторизацию по ключам. В файле /etc/ssh/sshd_config
убираем комментарии перед строками RSAAuthentication yes
, PubkeyAuthentication yes
и AuthorizedKeysFile .ssh/authorized_keys
. Перезапускаем SSH-сервер:
# service sshd restart Stopping sshd: [ OK ] Starting sshd: [ OK ]
На сервере c Ansible – копируем id_pub.pub
на сервер cent2
с помощью ssh-copy-id:
$ ssh-copy-id -i ~/.ssh/id_rsa.pub setevoy@cent2 setevoy@cent2's password: Now try logging into the machine, with "ssh 'setevoy@cent2'", and check in: .ssh/authorized_keys to make sure we haven't added extra keys that you weren't expecting.
Пробуем подключиться:
$ ssh cent2 The authenticity of host 'cent2 (10.***.***.250)' can't be established. RSA key fingerprint is d1:25:28:1f:5c:17:26:eb:0d:9a:72:ae:7c:44:ce:91. Are you sure you want to continue connecting (yes/no)? yes Warning: Permanently added 'cent2' (RSA) to the list of known hosts. Last login: Thu Mar 5 13:56:55 2015 from 10.249.140.93
Повторяем добавление ключа в файл authorized_keys
для локального пользователя:
$ ssh-copy-id -i ~/.ssh/id_rsa.pub setevoy@cent1
Теперь мы можем использовать Ansible.
Для проверки – обычный ping
всех серверов, описанных в /etc/ansible/hosts
:
$ ansible all -m ping cent2 | success >> { "changed": false, "ping": "pong" } cent1 | success >> { "changed": false, "ping": "pong" }
Можно обойтись и без создания ключей, но для этого потребуется установить sshpass
:
# yum install sshpass
$ ansible cent2 -m ping -k -u root SSH password: cent2 | success >> { "changed": false, "ping": "pong" }
Тут мы указываем:
cent2
вместоall
– обратиться к конкретной машине из списка в/etc/ansible/hosts
;-m
– модуль Ansibleping
;-k
– запросить пароль, вместо использования RSA-ключей;-u
– использовать заданное имя пользователя;
Полный список опций доступен по:
$ ansible --help
Продолжение – Ansible: модули