Решено: Взаимосвязанные задачи на разных хостах в ansible
Модератор: SLEDopit
- Bizdelnick
- Модератор
- Сообщения: 20800
- Статус: nulla salus bello
- ОС: Debian GNU/Linux
Решено: Взаимосвязанные задачи на разных хостах в ansible
Недавно начал осваивать ansible. Подскажите, кто с ним знаком, как лучше провернуть следующую вещь.
Имеется задача, для которой нужно одновременно изменить конфигурацию двух машин, но изменения должны быть разные. Конкретно, на одной машине работает сервер openvpn, на другой поднимается клиент. Надо сгенерить ключ с сертификатом и раскидать их вместе с конфигами по соответствующим хостам. В будущем клиенты будут добавляться, и хотелось бы этот процесс максимально упростить.
Имеется задача, для которой нужно одновременно изменить конфигурацию двух машин, но изменения должны быть разные. Конкретно, на одной машине работает сервер openvpn, на другой поднимается клиент. Надо сгенерить ключ с сертификатом и раскидать их вместе с конфигами по соответствующим хостам. В будущем клиенты будут добавляться, и хотелось бы этот процесс максимально упростить.
Пишите правильно:
в консоли вку́пе (с чем-либо) в общем вообще | в течение (часа) новичок нюанс по умолчанию | приемлемо проблема пробовать трафик |
- Stauffenberg
- Сообщения: 2042
- Статус: ☮ PEACE ☮
- ОС: открытая и свободная
Re: Решено: Взаимосвязанные задачи на разных хостах в ansible
В файле host создаете группу clients (cначала в группе один хост) и пишете правила для клинских систем. Потом добавляете в host адреса/hostnames и ansible подхватывает все системы из списка clients.
Упрощенный configure_clients.yml
Упрощенный configure_clients.yml
Код: Выделить всё
- name: clients
hosts: clients
tasks:
- command: scp что-то куда-то
- command: restart openvpn client
Labor omnia vincit
"Debugging is twice as hard as writing the code in the first place.
Therefore, if you write the code as cleverly as possible, you are, by definition, not smart enough to debug it.” (Brian Kernighan)
"Debugging is twice as hard as writing the code in the first place.
Therefore, if you write the code as cleverly as possible, you are, by definition, not smart enough to debug it.” (Brian Kernighan)
- Bizdelnick
- Модератор
- Сообщения: 20800
- Статус: nulla salus bello
- ОС: Debian GNU/Linux
Re: Решено: Взаимосвязанные задачи на разных хостах в ansible
Так мне не надо «что-то куда-то», мне надо что надо куда надо. ☺
Такой костыль не будет работать просто-напросто потому что у юзера на клиенте нет ssh-доступа насервер, как и у юзера на сервере нет ssh-доступа на клиент. Конфиги надо деплоить централизованно, для чего ansible вроде как и предназначен.
К тому же я не знаю, как прописать это «куда-то». Допустим, есть хосты server и clients. Как в плейбуке для clients указать адрес server?
Пишите правильно:
в консоли вку́пе (с чем-либо) в общем вообще | в течение (часа) новичок нюанс по умолчанию | приемлемо проблема пробовать трафик |
- Stauffenberg
- Сообщения: 2042
- Статус: ☮ PEACE ☮
- ОС: открытая и свободная
Re: Решено: Взаимосвязанные задачи на разных хостах в ansible
SSH конфигурация на столько само собой разумеющийся шаг перед использованием ansible, что я не счел нужным об этом писать. Приношу свои извинения
Labor omnia vincit
"Debugging is twice as hard as writing the code in the first place.
Therefore, if you write the code as cleverly as possible, you are, by definition, not smart enough to debug it.” (Brian Kernighan)
"Debugging is twice as hard as writing the code in the first place.
Therefore, if you write the code as cleverly as possible, you are, by definition, not smart enough to debug it.” (Brian Kernighan)
- Bizdelnick
- Модератор
- Сообщения: 20800
- Статус: nulla salus bello
- ОС: Debian GNU/Linux
Re: Решено: Взаимосвязанные задачи на разных хостах в ansible
Stauffenberg писал(а): ↑11.01.2017 13:46SSH конфигурация на столько само собой разумеющийся шаг перед использованием ansible
Правильно, я настраиваю доступ со своей машины ко всем конфигурируемым хостам. Что, мне ещё и доступ между ними во всех возможных комбинациях надо настраивать? Это помимо того, что муторно, ещё и небезопасно: компроментация любого хоста приведёт к компроментации всех остальных.
Пишите правильно:
в консоли вку́пе (с чем-либо) в общем вообще | в течение (часа) новичок нюанс по умолчанию | приемлемо проблема пробовать трафик |
- Bizdelnick
- Модератор
- Сообщения: 20800
- Статус: nulla salus bello
- ОС: Debian GNU/Linux
Re: Решено: Взаимосвязанные задачи на разных хостах в ansible
То, что мне было нужно, — это делегирование задач.
Впрочем, в свете последних новостей такой ерундой париться смысла нет.Bizdelnick писал(а): ↑11.01.2017 13:59компроментация любого хоста приведёт к компроментации всех остальных.
Пишите правильно:
в консоли вку́пе (с чем-либо) в общем вообще | в течение (часа) новичок нюанс по умолчанию | приемлемо проблема пробовать трафик |
- Bizdelnick
- Модератор
- Сообщения: 20800
- Статус: nulla salus bello
- ОС: Debian GNU/Linux
Re: Решено: Взаимосвязанные задачи на разных хостах в ansible
Вкратце та часть решения, для которой потребовалось делегирование, выглядит так:
Буду благодарен за советы по улучшению. Пока не вижу, как можно сделать проще, но громоздкость конструкции мне не нравится.
Код: Выделить всё
---
- hosts: clients
vars:
ca_server: server.example.com
easyrsa_path: /path/to/easy-rsa/2.0
tasks:
- name: check if certificate deployed
stat:
path: /etc/openvpn/{{ ansible_hostname }}.key
register: cert
- name: create key and certificate
when: not cert.stat.exists
delegate_to: "{{ ca_server }}"
shell: >
cd {{ easyrsa_path }} &&
. ./vars &&
./pkitool {{ ansible_hostname }}
- name: fetch private key and certificate
when: not cert.stat.exists
delegate_to: "{{ ca_server }}"
with_items:
- "{{ easyrsa_path }}/keys/{{ ansible_hostname }}.key"
- "{{ easyrsa_path }}/keys/{{ ansible_hostname }}.crt"
fetch:
src: "{{ item }}"
dest: tmp/
flat: yes
fail_on_missing: yes
- name: deploy private key
when: not cert.stat.exists
copy:
src: tmp/{{ ansible_hostname }}.key
dest: /etc/openvpn/{{ ansible_hostname }}.key
mode: 0600
- name: deploy certificate
when: not cert.stat.exists
copy:
src: tmp/{{ ansible_hostname }}.crt
dest: /etc/openvpn/{{ ansible_hostname }}.crt
mode: 0644
- name: local cleanup
become: no
with_fileglob:
- tmp/{{ ansible_hostname }}.*
local_action: file path={{ item }} state=absent
Буду благодарен за советы по улучшению. Пока не вижу, как можно сделать проще, но громоздкость конструкции мне не нравится.
Пишите правильно:
в консоли вку́пе (с чем-либо) в общем вообще | в течение (часа) новичок нюанс по умолчанию | приемлемо проблема пробовать трафик |
- Stauffenberg
- Сообщения: 2042
- Статус: ☮ PEACE ☮
- ОС: открытая и свободная
Re: Решено: Взаимосвязанные задачи на разных хостах в ansible
Bizdelnick писал(а): ↑11.01.2017 13:59Это помимо того, что муторно, ещё и небезопасно: компроментация любого хоста приведёт к компроментации всех остальных.
Каким образом компроментация любого хоста может проивести к компроментации всех остальных, если доступ только в одну сторону с одного хоста?
Мы явно говорим с Вами о разных вещах
Labor omnia vincit
"Debugging is twice as hard as writing the code in the first place.
Therefore, if you write the code as cleverly as possible, you are, by definition, not smart enough to debug it.” (Brian Kernighan)
"Debugging is twice as hard as writing the code in the first place.
Therefore, if you write the code as cleverly as possible, you are, by definition, not smart enough to debug it.” (Brian Kernighan)
Re: Решено: Взаимосвязанные задачи на разных хостах в ansible
и за предположения, что:
мне ещё и доступ между ними во всех возможных комбинациях надо настраивать?
ad infinitum
- Stauffenberg
- Сообщения: 2042
- Статус: ☮ PEACE ☮
- ОС: открытая и свободная
Re: Решено: Взаимосвязанные задачи на разных хостах в ansible
Я думаю, Вам сначала надо разобраться как устроен и правильно пользоваться ansible. Пока же советы тех. кто пользуется ansible, будут Вами восприняты как "костыли".
Labor omnia vincit
"Debugging is twice as hard as writing the code in the first place.
Therefore, if you write the code as cleverly as possible, you are, by definition, not smart enough to debug it.” (Brian Kernighan)
"Debugging is twice as hard as writing the code in the first place.
Therefore, if you write the code as cleverly as possible, you are, by definition, not smart enough to debug it.” (Brian Kernighan)
- Bizdelnick
- Модератор
- Сообщения: 20800
- Статус: nulla salus bello
- ОС: Debian GNU/Linux
Re: Решено: Взаимосвязанные задачи на разных хостах в ansible
Stauffenberg
Разобраться мне, безусловно, придётся. Сделайте одолжение и помогите в этом немножко: объясните, где ошибка в моих рассуждениях.
Вы предложили использовать scp для копирования файла с хоста A на хост B. Это значит, что пользователь на хосте A должен иметь доступ на хост B, видимо по незапароленному ключу или каким-то ещё образом, не предполагающим ввода пароля. Вывод: в случае компроментации хоста A злоумышленник получит ключ для доступа к хосту B, то есть автоматически будут скомпроментированы они оба.
Разобраться мне, безусловно, придётся. Сделайте одолжение и помогите в этом немножко: объясните, где ошибка в моих рассуждениях.
Вы предложили использовать scp для копирования файла с хоста A на хост B. Это значит, что пользователь на хосте A должен иметь доступ на хост B, видимо по незапароленному ключу или каким-то ещё образом, не предполагающим ввода пароля. Вывод: в случае компроментации хоста A злоумышленник получит ключ для доступа к хосту B, то есть автоматически будут скомпроментированы они оба.
Пишите правильно:
в консоли вку́пе (с чем-либо) в общем вообще | в течение (часа) новичок нюанс по умолчанию | приемлемо проблема пробовать трафик |
- Stauffenberg
- Сообщения: 2042
- Статус: ☮ PEACE ☮
- ОС: открытая и свободная
Re: Решено: Взаимосвязанные задачи на разных хостах в ansible
Bizdelnick
Да, один хост должен иметь доступ ко всем остальным. Но Вы написали
Если вероятность взлома этой системы на столько высока, можно придумать что-то с private ключем... например, удалять его с этой системы и копировать обратно, когда снова понадобится доступ. Лучшем решением было бы конечно что-то типа Kerberos, где ввод пароля создает сертификат на определенное время, но я думаю стоит просто лучше продумать безопасность системы с private ключем, а не выдумывать костыли.
Да, один хост должен иметь доступ ко всем остальным. Но Вы написали
компроментация любого хоста приведёт к компроментации всех остальных.
Если вероятность взлома этой системы на столько высока, можно придумать что-то с private ключем... например, удалять его с этой системы и копировать обратно, когда снова понадобится доступ. Лучшем решением было бы конечно что-то типа Kerberos, где ввод пароля создает сертификат на определенное время, но я думаю стоит просто лучше продумать безопасность системы с private ключем, а не выдумывать костыли.
Labor omnia vincit
"Debugging is twice as hard as writing the code in the first place.
Therefore, if you write the code as cleverly as possible, you are, by definition, not smart enough to debug it.” (Brian Kernighan)
"Debugging is twice as hard as writing the code in the first place.
Therefore, if you write the code as cleverly as possible, you are, by definition, not smart enough to debug it.” (Brian Kernighan)
- Bizdelnick
- Модератор
- Сообщения: 20800
- Статус: nulla salus bello
- ОС: Debian GNU/Linux
Re: Решено: Взаимосвязанные задачи на разных хостах в ansible
Stauffenberg писал(а): ↑12.01.2017 21:45Да, один хост должен иметь доступ ко всем остальным. Но Вы написали
Это не я написал, это Вы написали
Если я неправильно понял, что Вы имели в виду (а это вполне вероятно, потому что приведённый Вами код похож на что угодно, только не на работоспособную пьесу), то поясните это. А с ключами я как-нибудь разберусь без помощи зала.
Пишите правильно:
в консоли вку́пе (с чем-либо) в общем вообще | в течение (часа) новичок нюанс по умолчанию | приемлемо проблема пробовать трафик |
- Stauffenberg
- Сообщения: 2042
- Статус: ☮ PEACE ☮
- ОС: открытая и свободная
Re: Решено: Взаимосвязанные задачи на разных хостах в ansible
Bizdelnick писал(а): ↑12.01.2017 22:41приведённый Вами код похож на что угодно, только не на работоспособную пьесу
Продолжать беседу, думаю, бессмысленно.
Эту команду тоже можно запускать с того единстввенного хоста через SSH, который имеет доступ ко всем остальным. Не стоит интерпретировать это как код. Это просто один из подходов, как это можно было бы сделать, т.е. пример или псевдкод, если хотите
Код: Выделить всё
- command: restart openvpn client
Никакой магии. Всего лишь удаленная команда, т.е. запущенная через ssh, к примеру. Т.е. сначала копируем все конфиги, затем перезагружаем интерфейс. Запускается ansible скрипт на одном и том же хосте каждый раз.
Labor omnia vincit
"Debugging is twice as hard as writing the code in the first place.
Therefore, if you write the code as cleverly as possible, you are, by definition, not smart enough to debug it.” (Brian Kernighan)
"Debugging is twice as hard as writing the code in the first place.
Therefore, if you write the code as cleverly as possible, you are, by definition, not smart enough to debug it.” (Brian Kernighan)
- Bizdelnick
- Модератор
- Сообщения: 20800
- Статус: nulla salus bello
- ОС: Debian GNU/Linux
Re: Решено: Взаимосвязанные задачи на разных хостах в ansible
Аминь.
Пишите правильно:
в консоли вку́пе (с чем-либо) в общем вообще | в течение (часа) новичок нюанс по умолчанию | приемлемо проблема пробовать трафик |