Comment utiliser le transfert d'agent ssh avec «vagrant ssh»?

107

Plutôt que de créer une nouvelle paire de clés SSH sur une boîte vagabonde, j'aimerais réutiliser la paire de clés que j'ai sur ma machine hôte, en utilisant le transfert d'agent . J'ai essayé de définir config.ssh.forward_agent sur TRUE dans le Vagrantfile, puis redémarré la VM et essayé d'utiliser:

vagrant ssh -- -A

... mais je suis toujours invité à entrer un mot de passe lorsque j'essaye de faire une vérification git. Une idée de ce qui me manque?

Matt V.
la source
si vous n'avez pas vos clés ssh correctement, git ne devrait pas demander de mot de passe, mais vous dire que vous avez refusé les autorisations. Je suppose qu'on vous demande un mot de passe parce que vous effectuez un clonage depuis https au lieu de [email protected] (ssh). mes 2 cents.
alexserver

Réponses:

89

J'utilise vagrant 2 sur OS X Mountain Lion.

Vagrant.configure("2") do |config|
  config.ssh.private_key_path = "~/.ssh/id_rsa"
  config.ssh.forward_agent = true
end
  1. config.ssh.private_key_path est votre clé privée locale
  2. Votre clé privée doit être disponible pour l'agent ssh local. Vous pouvez vérifier avec ssh-add -L, s'il n'est pas répertorié, ajoutez-le avecssh-add ~/.ssh/id_rsa
  3. N'oubliez pas d'ajouter votre clé publique ~/.ssh/authorized_keyssur la VM Vagrant. Vous pouvez le faire par copier-coller ou en utilisant un outil comme ssh-copy-id
LuizSignorelli
la source
8
J'ai remarqué qu'après avoir configuré ci-dessus, je peux utiliser l'utilisateur "vagrant" pour "git clone" mais je ne peux pas utiliser l'utilisateur "root" pour "git clone". Savez-vous quel semble être le problème? Merci
Nam Nguyen
7
config.ssh.private_key_path = "~/.ssh/id_rsa"fait accrocher Vagrant Waiting for VM to boot.
apennebaker
14
Vous devez également conserver la clé d'insercure vagabondconfig.ssh.private_key_path = [ '~/.vagrant.d/insecure_private_key', '~/.ssh/id_rsa' ]
Calin
3
Sur OS X, j'ai trouvé l'ajout des clés privées au porte-clés OS X avec ssh-add -Ktravaillé (ainsi que config.ssh.forward_agent = true). Voir cette réponse
Flimm
2
J'ai eu la même erreur que @apennebaker. et suivre les étapes suggérées par Calin n'a pas aidé ... Ce qui a fonctionné pour moi a été d'ajouter des clés au trousseau à partir de mon système d'exploitation hôte et de désactiver l'affectation de config.ssh.private_key_path.
alexserver
80

Ajoutez-le au Vagrantfile

Vagrant::Config.run do |config|
   # stuff
   config.ssh.forward_agent = true
end

Voir la documentation

EnabrenTane
la source
11
Assurez-vous que vous ajoutez ssh sur l'hôte sous-jacent et que la clé est déchiffrée.
EnabrenTane
1
Notez que Windows ne démarre pas automatiquement ssh-agent, que vous devez exécuter pour transférer vos clés ssh. Suivez ce guide pour configurer le démarrage automatique de ssh-agent sous Windows.
nebffa
62
Cette réponse ne mérite probablement pas autant de votes. OP indique clairement qu'ils ont ajouté config.ssh.forward_agentà leur fichier de configuration, alors quelles nouvelles informations cette réponse fournit-elle? Même le lien est déjà dans la question.
Trindaz
7
@Trindaz vous avez raison. Je ne peux pas expliquer pourquoi c'est l'une de mes réponses les plus populaires. Pourtant, cela a apparemment aidé au moins 52 personnes, alors je dois appeler cela une victoire.
EnabrenTane
1
Cette réponse n'apporte en effet aucune nouvelle information, mais en revanche c'est tout ce qu'il faut configurer pour une machine provisionnée par Vagrant. Au moins à condition que le transfert d'agent soit configuré correctement sur la machine de connexion (c'est-à-dire que le transfert fonctionne pour d'autres machines non vagabondes).
techraf
20

En plus d'ajouter "config.ssh.forward_agent = true" au fichier vagrant, assurez-vous que l'ordinateur hôte est configuré pour le transfert d'agent. Github fournit un bon guide pour cela. (Consultez la section de dépannage).

HipsterHobo
la source
7

J'avais cela fonctionnant avec les réponses ci-dessus sur 1.4.3, mais j'ai arrêté de travailler sur 1.5. Je dois maintenant courir ssh-addpour travailler pleinement avec la version 1.5.

Pour l'instant, j'ajoute la ligne suivante à mon script d'approvisionnement ansible. - name: Make sure ssk keys are passed to guest. local_action: command ssh-add

J'ai également créé un aperçu de ma configuration: https://gist.github.com/KyleJamesWalker/9538912

Kyle James Walker
la source
J'ai toujours dû utiliser ssh-add avec 1.4 et 1.5, sinon il n'y avait pas d'agent en cours d'exécution à transférer
iheggie
5

Si vous êtes sous Windows, le transfert SSH dans Vagrant ne fonctionne pas correctement par défaut (à cause d'un bogue dans net-ssh). Voir ce rapport de bogue Vagrant particulier: https://github.com/mitchellh/vagrant/issues/1735

Cependant, il existe une solution de contournement! Copiez simplement automatiquement votre clé SSH locale sur la VM Vagrant via un simple script d'approvisionnement dans votre VagrantFile. Voici un exemple: https://github.com/mitchellh/vagrant/issues/1735#issuecomment-25640783

Tim Donohue
la source
2

Lorsque nous avons récemment essayé le vagrant-awsplugin avec Vagrant 1.1.5, nous avons rencontré un problème avec le transfert d'agent SSH. Il s'est avéré que Vagrant forçait IdentitiesOnly=yessans option pour le changer en no. Cela a forcé Vagrant à ne regarder que la clé privée que nous avons répertoriée dans leVagrantfile fournisseur AWS.

J'ai écrit nos expériences dans un article de blog . Cela peut se transformer en pull request à un moment donné.

Benjamin Oakes
la source
2
Existe-t-il un moyen d'automatiser la copie de la clé publique sous-jacente sur la machine hôte vers la machine virtuelle Vagrant lors de la création avec Vagrant up? Pour le moment, je dois créer la machine, me connecter manuellement, puis ajouter ma clé publique à /home/vagrant/.ssh/authorized_keys
Noah
1

Assurez-vous que la VM ne lance pas son propre agent SSH. J'avais cette ligne dans mon~/.profile

eval `ssh-agent`

Après l'avoir supprimé, le transfert d'agent SSH a fonctionné.

Fabian Schmengler
la source
0

Le vrai problème est que Vagrant utilise 127.0.0.1:2222 comme redirection de port par défaut. Vous pouvez en ajouter un (pas 2222, 2222 est déjà occupé par défaut)

config.vm.network "forwarded_port", invité: 22, hôte: 2333, host_ip: "0.0.0.0"

"0.0.0.0" est une demande de prise en charge de la connexion externe. puis ssh -p 2333 [email protected] (changement de votre propre adresse IP d'hôte, dud) fonctionnera très bien. Merci, appelez-moi Leifeng!

Leifeng
la source
0

Sous Windows, le problème est que Vagrant ne sait pas comment communiquer avec l'agent ssh de git-bash. Il sait cependant comment utiliser Pageant de PuTTY. Donc, tant que Pageant est en cours d'exécution et a chargé votre clé SSH, et tant que vous avez défini config.ssh.forward_agent, cela devrait fonctionner.

Voir ce commentaire pour plus de détails.

Si vous utilisez Pageant, la solution de contournement consistant à mettre à jour Vagrantfile pour copier les clés SSH sous Windows n'est plus nécessaire.

Josh Kelley
la source