web-dev-qa-db-fra.com

automatiser l'utilisation de la clé locale SSH pour le déploiement de git avec ansible

Je travaille avec vagabond et ansible. Je veux automatiser le rôle de déploiement de ansible ( Vous pouvez vérifier mon dépôt ici ). À cette fin, j'essaie de déployer ma clé ssh locale dans mon VPS et ma machine invitée vagabonde (j'essaie le transfert d'agent SSH).

[~ # ~] objectif [~ # ~]

Automatisez le processus de déploiement avec git en utilisant ansible. Je l'ai déjà fait:

---

- name: read-write git checkout from github
  git: repo={{ repository }} dest=/home/site

Où:

---
# Variables here are applicable to all Host groups

repository: [email protected]:dgnest/dgnest.git

Problème [~ # ~] [~ # ~]

Quand je fais: "disposition vagabonde", la console s'arrête ici:

TASK: [deployment | read-write git checkout from github] ********************** 

C'est parce que je n'ai pas configuré les clés ssh.

J'AI ESSAYÉ

Je voudrais utiliser l'option key_file du module git d'ansible. Mais cela échoue aussi.

---                                                                             

- name: read-write git checkout from github                                     
  git: repo={{ repository }} dest=/home/site key_file=/home/oscar/.ssh/id_rsa.pub

Une autre option consiste à copier mon ~/ssh/id_rsa.pub dans chaque VPS et vagabond, mais mon problème dans ce cas est de gérer avec tous les différents utilisateurs. Vagrant utilise l'utilisateur "vagrant" et mon VPS en utilise un autre, donc j'ai dû mettre ma clé locale ssh dans chacun de ces utilisateurs?

J'espère que tu peux m'aider. Je vous remercie.

MISE À JOUR:

Je viens d'automatiser la réponse @leucos (merci). Copie des clés rsa privées et publiques. Je partage ce lien avec la mise en œuvre.

30
oskargicast

Si vous choisissez le key_file façon, je suppose que la clé doit être sur la machine VPS/vagabonde. Vous voudrez donc peut-être le copier en premier. Notez que vous avez besoin d'une clé privée ici, pas publique.

Pour votre deuxième option, vous pouvez pousser votre clé vers des utilisateurs spécifiques en fonction du type d'instance. Supposons que l'utilisateur dans VPS soit vpsuser et que vous déployez principalement sur ces VPS, vous pouvez faire:

group_vars/all:

deploy_user=vpsuser

group_vars/vagrant

deploy_user=vagrant

Ensuite, vous pourriez avoir un playbook comme:

- 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

Cependant, je ne sais pas comment le mot de passe de la clé privée distante peut être demandé (je ne pense pas qu'ansible autorise le transfert de l'agent d'authentification par défaut (vérifiez -vvvv output), vous devrez peut-être jouer avec votre ~/.ansible.cfg).

Je vous suggère d'utiliser une clé spécifique à des fins de déploiement (avec des autorisations en lecture seule sur votre référentiel git). De cette façon, votre clé privée ne quittera pas votre machine. Rendez cette clé spéciale sans mot de passe. Je pense que le compromis de sécurité est acceptable car - il ne fera que protéger votre code, - votre code est extrait sur la machine où se trouve la clé privée, de sorte que le jeu est déjà terminé.

Une autre option est de distribuer votre application à partir de votre caisse locale en utilisant ansible: faites un tarball, copiez les fichiers, dézippez et vous êtes prêt. De cette façon, vous n'avez pas besoin de laisser les informations d'identification de sécurité sur votre VPS.

Bonne chance.

31
leucos

Vous pas devez copier votre clé SSH locale sur des serveurs distants. Au lieu de cela, vous créez simplement un fichier nommé ansible.cfg dans le répertoire à partir duquel vous exécutez les scripts de déploiement et définissez les paramètres suivants:

[ssh_connection]
ssh_args = -o ForwardAgent=yes

C'est tout, maintenant votre identité locale est transmise aux serveurs distants que vous gérez avec Ansible.

33
Igor Pomaranskiy