Wie verwende ich die Weiterleitung von SSH-Agenten mit "vagrant ssh"?


107

Anstatt ein neues SSH-Schlüsselpaar auf einer Vagabundbox zu erstellen, möchte ich das Schlüsselpaar, das ich auf meinem Host-Computer habe, mithilfe der Agentenweiterleitung wiederverwenden . Ich habe versucht, config.ssh.forward_agent in der Vagrant- Datei auf TRUE zu setzen, dann die VM neu gestartet und versucht, Folgendes zu verwenden:

vagrant ssh -- -A

... aber ich werde immer noch zur Eingabe eines Passworts aufgefordert, wenn ich versuche, einen Git-Checkout durchzuführen. Irgendeine Idee, was mir fehlt?


Wenn Sie Ihre SSH-Schlüssel nicht richtig haben, sollte Git nicht nach einem Passwort fragen, sondern Ihnen mitteilen, dass Sie Berechtigungen verweigert haben. Ich denke, Sie werden nach einem Passwort gefragt, weil Sie von https anstelle von git@github.com (ssh) klonen. meine 2 Cent.
Alexander Server

Antworten:


89

Ich verwende Vagrant 2 unter 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 ist Ihr lokaler privater Schlüssel
  2. Ihr privater Schlüssel muss dem lokalen SSH-Agenten zur Verfügung stehen. Sie können überprüfen ssh-add -L, ob es nicht aufgeführt ist, und es mit hinzufügenssh-add ~/.ssh/id_rsa
  3. Vergessen Sie nicht, Ihren öffentlichen Schlüssel ~/.ssh/authorized_keysauf der Vagrant-VM hinzuzufügen . Sie können dies kopieren und einfügen oder ein Tool wie ssh-copy-id verwenden

8
Ich habe festgestellt, dass ich nach dem Einrichten oben den Benutzer "vagrant" verwenden kann, um "git clone" zu erstellen, aber nicht den Benutzer "root", um "git clone" zu verwenden. Wissen Sie, was das Problem zu sein scheint? Danke
Nam Nguyen

7
config.ssh.private_key_path = "~/.ssh/id_rsa"lässt Vagrant durchhalten Waiting for VM to boot.
Apennebaker

14
Sie müssen auch den Vagabundschlüssel behaltenconfig.ssh.private_key_path = [ '~/.vagrant.d/insecure_private_key', '~/.ssh/id_rsa' ]
Calin

3
Unter OS X habe ich festgestellt, dass das Hinzufügen der privaten Schlüssel zur OS X-Schlüsselkette mit ssh-add -Kfunktioniert (sowie config.ssh.forward_agent = true) funktioniert . Siehe diese Antwort
Flimm

2
Ich habe den gleichen Fehler wie @apennebaker. und das Befolgen der von Calin vorgeschlagenen Schritte hat nicht geholfen ... Was für mich funktioniert hat, war das Hinzufügen von Schlüsseln zum Schlüsselbund von meinem Host-Betriebssystem und das Deaktivieren der Zuweisung von config.ssh.private_key_path.
Alexander Server

80

Fügen Sie es dem Vagrantfile hinzu

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

Siehe die Dokumente


11
Stellen Sie sicher, dass Sie auf dem zugrunde liegenden Host ssh-addieren und der Schlüssel entschlüsselt ist.
EnabrenTane

1
Beachten Sie, dass Windows den SSH-Agenten nicht automatisch startet, den Sie ausführen müssen, um Ihre SSH-Schlüssel weiterzuleiten. Befolgen Sie diese Anleitung, um den Autostart von ssh-agent unter Windows einzurichten.
Nebffa

62
Diese Antwort verdient wahrscheinlich nicht so viele Stimmen. OP gibt eindeutig an, dass sie config.ssh.forward_agentzu ihrer Konfigurationsdatei hinzugefügt wurden. Welche neuen Informationen liefert diese Antwort? Auch der Link ist schon in Frage.
Trindaz

7
@ Trindaz du hast vollkommen recht. Ich kann nicht erklären, warum dies eine meiner beliebtesten Antworten ist. Dies hat anscheinend mindestens 52 Menschen geholfen, daher muss ich das einen Sieg nennen.
EnabrenTane

1
Diese Antwort bringt zwar keine neuen Informationen, aber andererseits ist es alles, was für eine von Vagrant bereitgestellte Maschine konfiguriert werden muss. Zumindest vorausgesetzt, Sie haben die Agentenweiterleitung auf dem Verbindungscomputer korrekt eingerichtet (dh die Weiterleitung funktioniert für andere, nicht vagabundierende Computer).
Techraf

20

Stellen Sie zusätzlich zum Hinzufügen von "config.ssh.forward_agent = true" zur Vagrant-Datei sicher, dass der Host-Computer für die Agentenweiterleitung eingerichtet ist. Github bietet hierfür einen guten Leitfaden . (Lesen Sie den Abschnitt zur Fehlerbehebung.)


7

Ich hatte dies mit den obigen Antworten auf 1.4.3 arbeiten, aber auf 1.5 aufgehört zu arbeiten. Ich muss jetzt laufen ssh-add, um mit 1.5 voll zu arbeiten.

Im Moment füge ich meinem ansible Provisioning-Skript die folgende Zeile hinzu. - name: Make sure ssk keys are passed to guest. local_action: command ssh-add

Ich habe auch einen Kern meines Setups erstellt: https://gist.github.com/KyleJamesWalker/9538912


Ich musste immer ssh-add mit 1.4 und 1.5 verwenden, da sonst kein Agent lief, der weitergeleitet werden konnte
iheggie

5

Wenn Sie unter Windows arbeiten, funktioniert die SSH-Weiterleitung in Vagrant standardmäßig nicht ordnungsgemäß (aufgrund eines Fehlers in net-ssh). Siehe diesen speziellen Vagrant-Fehlerbericht: https://github.com/mitchellh/vagrant/issues/1735

Es gibt jedoch eine Problemumgehung! Kopieren Sie einfach Ihren lokalen SSH-Schlüssel automatisch über ein einfaches Bereitstellungsskript in Ihrer VagrantFile auf die Vagrant-VM. Hier ist ein Beispiel: https://github.com/mitchellh/vagrant/issues/1735#issuecomment-25640783


2

Als wir kürzlich das vagrant-awsPlugin mit Vagrant 1.1.5 ausprobiert haben , sind wir auf ein Problem mit der Weiterleitung von SSH-Agenten gestoßen. Es stellte sich heraus, dass Vagrant IdentitiesOnly=yesohne die Option zwang , es zu ändern no. Dies zwang Vagrant, nur den privaten Schlüssel zu betrachten, den wir im Vagrantfilefür den AWS-Anbieter aufgeführt haben.

Ich habe unsere Erfahrungen in einem Blogbeitrag festgehalten . Es kann sich irgendwann in eine Pull-Anfrage verwandeln.


2
Gibt es eine Möglichkeit, das Kopieren des zugrunde liegenden öffentlichen Schlüssels auf dem Hostcomputer auf die Vagrant-VM bei der Erstellung mit zu automatisieren Vagrant up? Im Moment muss ich die Maschine erstellen, mich manuell anmelden und dann meinen öffentlichen Schlüssel zu /home/vagrant/.ssh/authorized_keys
Noah

1

Stellen Sie sicher, dass die VM keinen eigenen SSH-Agenten startet. Ich hatte diese Zeile in meinem~/.profile

eval `ssh-agent`

Nach dem Entfernen funktionierte die Weiterleitung des SSH-Agenten.


0

Das eigentliche Problem ist, dass Vagrant 127.0.0.1:2222 als Standard-Portweiterleitung verwendet. Sie können eine hinzufügen (nicht 2222, 2222 ist standardmäßig bereits belegt)

config.vm.network "forwarded_port", Gast: 22, Host: 2333, Host_ip: "0.0.0.0"

"0.0.0.0" ist eine Möglichkeit, eine Anfrage von einer externen Verbindung entgegenzunehmen. dann funktioniert ssh -p 2333 vagrant@192.168.2.101 (Änderung Ihrer eigenen Host-IP-Adresse, dud) einwandfrei. Danke mir, nenn mich einfach Leifeng!


0

Unter Windows besteht das Problem darin, dass Vagrant nicht weiß, wie er mit dem SSH-Agenten von git-bash kommunizieren soll. Es weiß jedoch, wie man PuTTYs Festzug benutzt. Solange Pageant ausgeführt wird und Ihren SSH-Schlüssel geladen hat und Sie config.ssh.forward_agent festgelegt haben, sollte dies funktionieren.

Siehe diesen Kommentar für Details.

Wenn Sie Pageant verwenden, ist die Problemumgehung zum Aktualisieren der Vagrant-Datei zum Kopieren von SSH-Schlüsseln unter Windows nicht mehr erforderlich.

Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.