LINUX.ORG.RU
ФорумAdmin

Как пропихивать ключи из Дженкинса в Энсибл?

 ,


1

2

Уважемые одмины, есть проблемка.

Я хочу с Jenkins запускать Ansible. (у дженкинса есть плагин для запуска ansible).

Проблема в том, что на слейве нет открытых ключей. Как их можно туда подпихнуть прямо из дженкинсовской джобы?

У Дженкинса есть специальное место для Credentials, можно ли сохраненные там ключи как-то подпихнуть в энсибл на слейве?

Если нельзя, как это правильно делать?

★★★★☆

Что, какие ключи? Если ты что-то можешь сделать в shell'е, то ты сможешь это сделать и в ansible. Если плагин jenkins'а не умеет в вызов команды оболочки с аргументами то я бы от него отказался.

alozovskoy ★★★★★
()
Ответ на: комментарий от stevejobs

Я не понимаю что вообще ты хочешь сделать (ну и как работает плагин jenkins'а не знаю), так что ничего по этому поводу не скажу. Касаемо Ansible и работы с ним могу что-то посоветовать, но пока мне не ясно что у тебя за проблема.

alozovskoy ★★★★★
()
Ответ на: комментарий от alozovskoy

У Дженкинса есть встроенная «ключница». В ключницу можно сохранять ключи: либо именованые пары юзернейм+пароль, либо обычные ssh ключи.

Большинство плагинов Дженкинса имеют настройку: использовать ключ из ключницы. Например, плагин для запуска SSH команд на удаленной машине хочет ключ из ключницы, чтобы подключиться к этой машине.

Плагин для Энсибла - не исключение, там тоже есть такая настройка.

Этот ключ даст подсоединиться только к хосту, на котором будет выполняться Энсибл (то есть к jenkins slave node). Совершенно аналогично плагину для выполнения команд по SSH.

Но надо понимать, что сервак, с которым ты соединился - чистый. Никаких настроек ssh на нем нет, и в особенности нет никаких ключей, чтобы подсоединяться по ssh к другим серверам. Просто чистая свежая виртуалка для запуска плейбуков.

Так начерта тебе плейбук, который всё что может - настраивать сервер, на котором он запущен? Наверное, тебе хочется выполнять команды по сети на других серверах. Но ты не сможешь к ним подсоединиться, потому что на этом серваке (чистой свежей виртуалке) нифига нет ключей для ssh!

Конечно, можно хранить ключи прямо в репозитории проекта, и потом копировать по ssh на целевую виртуалку, где будет крутиться плейбук. Но это отвратительная практика по понятным причинам, у нас её безопасники не заапрувят.

И какой же тут выход?

stevejobs ★★★★☆
() автор топика
Ответ на: комментарий от vrutkovs

Он прочитает этот ключ только для того, чтобы соединиться со слейвом, разве нет? А мне с этого слейва какбы хочется еще и по всем остальным сервакам в кластере плейбук запустить. Собственно, для чего Энсибл и создан. Причем на этих серваках могут быть совершенно разные ключи для доступа по ssh.

stevejobs ★★★★☆
() автор топика
Ответ на: комментарий от stevejobs

Так, давай для начала вот что проясним - Ansible запускается на одной машине (рядом с jenkins или без него не суть важно), и потом по ssh ходит по удаленным хостам. На удаленных хостах никакого Ansible нет, он туда заливает готовые питоноскрипты и запускает там. (Я понимаю что скорее всего ты это все знаешь, просто чтоб у нас не было недопонимания).

На сколько я понял что сходить по пути «хост с jenkins» -> «хост с Ansible» не проблема, тут берется ключ из этой «ключницы» jenkins'а. Дальше тебе надо либо скопировать приватный ключ на хост с Ansible (не на стопицот хостов, которые ты будешь настраивать, а именно на «мастер», а на тех удаленных машинах должна быть соответствующая публичная часть ключа) или использовать логин на удаленные тачки по паролю. Представим что Ansible вообще нет - как бы ты решил эту проблему на shell'е? Если есть решение как организовать такую работу через щель, то и Ansible сможешь запустить. Если такого решения нет - увы. Вообще мастер-хост Ansible изначально должен быть настроен и сам Ansible должен уметь ходить в удаленные хосты. Это все не должно настраиваться на лету при каждой сборке в jenkins. Если ты имеешь настроенный мастер Ansible и у тебя есть возможность зайти на него из jenkins'а и выполнить команду оболочки то проблем никаких.

Конечно, можно хранить ключи прямо в репозитории проекта, и потом копировать по ssh на целевую виртуалку, где будет крутиться плейбук. Но это отвратительная практика по понятным причинам, у нас её безопасники не заапрувят.

Мне не понятны причины. Да, ключи мы в репе, конечно, не храним, но одна из активностей при заведении каждой новой виртуалки - закидывание туда публичной части ключей, с которыми работает Ansible (это вообще в образ ВМки вшито). Чем это плохо? Приватная часть вообще лежит только на «мастере» Ansible и никуда никогда не копируется.

alozovskoy ★★★★★
()
Ответ на: комментарий от stevejobs

Он прочитает этот ключ только для того, чтобы соединиться со слейвом, разве нет?

Это уже смотря как настроен SSH Slave плагин. Я стараюсь запускать слейвы в контейнере, но можно и через cloud-init настраивать.

Причем на этих серваках могут быть совершенно разные ключи для доступа по ssh.

Вот и сгенерируй один слейвовый ключ, засунь его в ключницу Jenkins'а и рассуй его по серверам в authorized_hosts?

vrutkovs ★★
()
Ответ на: комментарий от stevejobs

Но надо понимать, что сервак, с которым ты соединился - чистый. Никаких настроек ssh на нем нет, и в особенности нет никаких ключей, чтобы подсоединяться по ssh к другим серверам. Просто чистая свежая виртуалка для запуска плейбуков.

А как ты тогда к нему энсиблом коннектишься? Не проще ли подсовывать ему в authorized_hosts нужный ключ через cloud-init?

vrutkovs ★★
()

Для дженкинса был плагин, который предоставляет джобам сокет ssh-агента. Тебе не это случаем надо?

Deleted
()
Ответ на: комментарий от stevejobs

Ну это не минус данного метода. Делегируй админу.

Вообще ты очень многого хочешь (посмотрел твой соседний тред про поиск сервера для сервера). Ansible по сути это просто запускалка скриптов на удаленных хостах с контролем их (скриптов) выполнения. Отличия от shell'а только в том что ты не паришься на тему того как в цикле бегать по хостам и где ловить stdout. А ты его воспринимаешь, похоже, как большую кнопку «сделать хорошо».

alozovskoy ★★★★★
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.