Avoir le provisioning vagrant cloner un référentiel,

5

J'essaie de créer un environnement qui clone un référentiel dans le répertoire de partage une fois la VM mise à niveau. Le problème est que la boîte n'a pas d'autorisation SSH sur le référentiel distant.

J'ai un script bash simple:

#!/bin/bash
cd /vagrant
if [ ! -d "repo" ]; then
  git clone [email protected]:/my/repo.git
end

Je reçois l'erreur:

La vérification de la clé de l'hôte a échoué.

fatal: l'extrémité distante a raccroché de manière inattendue

Ce qui est logique car il n'y a pas de clé dans /home/vagrant/.ssh

J'ai fait pas mal de recherches en vain, j'ai essayé de définir config.ssh.forward_agent = truece qui me permet de cloner manuellement le référentiel lorsque je suis ssh dans la machine, mais pas lorsqu'il tente de s'exécuter lui-même. J'ai également essayé de spécifier, config.ssh.private_ssh_key = "~/.ssh/id_rsa"mais vagrant ne finit tout simplement pas le chargement (je suppose que l'application ne peut pas entrer dans la boîte).

Ma question est donc ... Dois-je reconstruire ma boîte de base pour inclure un jeu de clés et autoriser ces clés avec mon dépôt distant? Ou y a-t-il une solution plus facile qui me manque?

Remarque: j'ai examiné les bases de SSH sur les machines virtuelles vagabondes qui semblent similaires, mais je pense qu'il s'agit davantage de configurer un utilisateur différent sur la boîte et la solution publiée est beaucoup plus manuelle que je ne le souhaiterais.

JaredMcAteer
la source

Réponses:

4

La solution temporaire pour moi était de générer un ensemble de clés et de les placer dans le même répertoire que le Vagrantfile, puis lors de la mise en service, je les copie dans un répertoire /root/.ssh/. Il y avait un petit problème avec cela et c'est que je devais aussi générer un known_hostsfichier pour que la VM accepte la connexion du serveur distant. Le known_hostsfichier réside également dans le répertoire /vagrant/.ssh/ et est copié avec les clés. Tout fonctionne maintenant.

Finalement, lorsque je n'essaie pas de télécharger une boîte de 1 Go sur mon hôte de fichiers via une connexion Wi-Fi inégale, la vraie solution consiste à inclure ces fichiers dans la boîte de base de manière permanente.

JaredMcAteer
la source
2
Avez-vous trouvé une solution finale pour cela (puisque celui-ci était temporaire)? Je cherche quelque chose de simple comme vagrant upet tout fonctionne.
Torsten
J'ai reconstruit la base avec les clés incluses.
JaredMcAteer
La vraie question est: pourquoi config.ssh.forward_agent = truedans Vagrantfile n'a pas fonctionné pour ce problème?
bruyant
Je ne suis pas sûr. J'utilise config ssh.forward_agent = truemaintenant et ça marche. Peut-être que la version de Vagrant que j'utilisais en 2013 était en panne.
JaredMcAteer
1

Il y a quelques trucs à ce sujet ici: https://serverfault.com/questions/107187/ssh-agent-forwarding-and-sudo-to-an-un-user-user - en résumé, le transfert SSH fonctionne via une variable d'environnement qui n'est pas conservé par su. Des solutions à différents niveaux d'Unix-fu sont suggérées; Je suis allé avec un pas cher et joyeux:

su -c "export SSH_AUTH_SOCK=$SSH_AUTH_SOCK; CMD" -l vagrant

CMDest la commande que vous voulez exécuter.

Cela me permet alors courir git clonecomme vagrantlors de l' approvisionnement, donc je peux cloner GitHub / repo Bitbucket en utilisant la clé SSH publique de mon OS système hôte X sans avoir tout finissent par propriété root. Et la seule autre étape requise est de pré-remplir ~/.ssh/known_hostsavec les clés requises (ce que je suppose que vous faites déjà).

(Contrairement à la situation sur un système réel (voir les commentaires à la réponse suggérant ceci - https://serverfault.com/a/371788/321408 )), il n'est pas nécessaire de modifier les autorisations du socket, car il appartient déjà à vagrant- quelque chose dont le vagrant sshJe suppose donc que le mécanisme ne fonctionne pas correctement. Je ne crois donc pas que cela pose un problème de sécurité.)

Tom Seddon
la source