Автоматизировать использование локального ключа SSH для развертывания git с доступным
Я работаю с бродягой и правдой. Я хочу автоматизировать роль развертывания для пользователя (Здесь вы можете проверить свое репо).
Для этого я пытаюсь развернуть свой локальный ключ ssh в свой VPS и мой гостевой гостевой компьютер (я пытаюсь переадресовать агент SSH).
ЗАДАЧА
Автоматизировать процесс развертывания с помощью git с помощью ansible. Я уже сделал это:
---
- name: read-write git checkout from github
git: repo={{ repository }} dest=/home/site
Где:
---
# Variables here are applicable to all host groups
repository: [email protected]:dgnest/dgnest.git
ПРОБЛЕМА
Когда я это делаю: "бродяжничество", консоль останавливается здесь:
TASK: [deployment | read-write git checkout from github] **********************
Это потому, что я не установил ключи ssh.
я TRIED
Я хотел бы использовать параметр key_file, который имеет модуль git. Но он тоже не работает.
---
- name: read-write git checkout from github
git: repo={{ repository }} dest=/home/site key_file=/home/oscar/.ssh/id_rsa.pub
Другой вариант - скопировать мой ~/ssh/id_rsa.pub в каждый VPS и бродягу, но в этом случае моя проблема - обращаться со всеми разными пользователями. Вагрант использует "бродячего" пользователя, а мой VPS использует другие, поэтому мне пришлось поместить свой локальный ключ ssh в каждого из этих пользователей?
Надеюсь, ты поможешь мне. Спасибо.
UPDATE:
Я только что автоматизировал ответ @leucos (спасибо). Копирование закрытых и общедоступных ключей rsa. Я разделяю эту ссылку с реализацией.
Ответы
Ответ 1
Если вы выберете способ key_file
, я предполагаю, что ключ должен быть на машине VPS/бродяга. Поэтому сначала вы можете скопировать его. Обратите внимание, что вам нужен закрытый ключ, а не публичный.
Для вашего второго варианта вы можете нажать свой ключ для определенных пользователей в зависимости от типа экземпляра. Предположим, что пользователь в VPS является vpsuser, и что вы развертываете в основном на этих VPS, вы можете сделать:
group_vars/all:
deploy_user=vpsuser
group_vars/бродячая
deploy_user=vagrant
Тогда у вас может быть такая игра, как:
- name: send key to remote deploy user
copy: src=files/private_key dest=~/{{deploy_user}}/.ssh/priv_key
- name: read-write git checkout from github
git: repo={{ repository }} dest=/home/site key_file=~/{{deploy_user}}/.ssh/priv_key
Однако я понятия не имею, как можно запросить пароль для удаленного частного ключа (я не думаю, что ansible позволяет пересылку агента аутентификации по умолчанию (проверьте вывод -vvvv
), вам, возможно, придется поиграть со своим ~/.ansible.cfg
).
Я предлагаю вам использовать определенный ключ для развертывания (с perm-версиями только для вашего репозитория git). Таким образом, ваш личный ключ не покинет вашу машину. Сделайте этот специальный ключ без пароля. Я считаю, что компромисс в сфере безопасности является приемлемым, поскольку
- он просто защитит ваш код,
- ваш код выведен на машине, где секретный ключ, так что игра уже завершена.
Другим вариантом является распространение вашего приложения из локальной проверки путем использования: сделать tarball, скопировать файлы, untar, и вы настроены. Таким образом, вам не нужно оставлять учетные данные безопасности на вашем VPS.
Удачи.
Ответ 2
Вам не нужно копировать локальный ключ SSH на удаленные серверы. Вместо этого вы просто создаете файл с именем ansible.cfg
в каталоге, в котором запускаете сценарии развертывания, и задайте следующие параметры:
[ssh_connection]
ssh_args = -o ForwardAgent=yes
Чтобы он, теперь ваш локальный идентификатор перенаправляется на удаленные серверы, которыми вы управляете с помощью Ansible.