Jak korzystać z przekazywania agentów ssh z „vagrant ssh”?

107

Zamiast tworzyć nową parę kluczy SSH w pudełku włóczęgi, chciałbym ponownie użyć pary kluczy, którą mam na moim komputerze głównym, używając przekazywania agentów . Próbowałem ustawić config.ssh.forward_agent na TRUE w pliku Vagrantfile, a następnie ponownie uruchomiłem maszynę wirtualną i próbowałem użyć:

vagrant ssh -- -A

... ale nadal pojawia się monit o podanie hasła, gdy próbuję wykonać transakcję git. Masz jakiś pomysł, czego mi brakuje?

Matt V.
źródło
jeśli nie masz poprawnie kluczy ssh, git nie powinien pytać o hasło, ale powiedzieć, że odmówiłeś uprawnień. Wydaje mi się, że jesteś proszony o hasło, ponieważ klonujesz z https zamiast z [email protected] (ssh). moje 2 centy.
alexserver

Odpowiedzi:

89

Używam vagranta 2 na 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 to Twój lokalny klucz prywatny
  2. Twój klucz prywatny musi być dostępny dla lokalnego agenta ssh. Możesz to sprawdzić ssh-add -L, jeśli nie ma go na liście, dodaj go za pomocąssh-add ~/.ssh/id_rsa
  3. Nie zapomnij dodać klucza publicznego do ~/.ssh/authorized_keysna Vagrant VM. Możesz to zrobić kopiując i wklejając lub używając narzędzia takiego jak ssh-copy-id
LuizSignorelli
źródło
8
Zauważyłem, że po skonfigurowaniu powyżej, mogę użyć użytkownika „vagrant” do „git clone”, ale nie mogę użyć użytkownika „root” do „git clone”. Czy wiesz, co wydaje się być problemem? Dzięki
Nam Nguyen
7
config.ssh.private_key_path = "~/.ssh/id_rsa"sprawia, że ​​Vagrant się trzyma Waiting for VM to boot.
apennebaker
14
Musisz także zachować klucz włóczęgi insercureconfig.ssh.private_key_path = [ '~/.vagrant.d/insecure_private_key', '~/.ssh/id_rsa' ]
Calin
3
Na OS X znalazłem dodanie kluczy prywatnych do łańcucha kluczy OS X z ssh-add -Kdziałającym (jak również config.ssh.forward_agent = true). Zobacz tę odpowiedź
Flimm
2
Otrzymałem ten sam błąd, co @apennebaker. i wykonanie kroków, które sugerował Calin, nie pomogło ... Co zadziałało, to dodanie kluczy do pęku kluczy z mojego systemu operacyjnego hosta i wyłączenie przypisania config.ssh.private_key_path.
alexserver
80

Dodaj go do pliku Vagrantfile

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

Zobacz dokumentację

EnabrenTane
źródło
11
Upewnij się, że dodajesz ssh na podstawowym hoście, a klucz jest odszyfrowany.
EnabrenTane
1
Zwróć uwagę, że system Windows nie uruchamia się automatycznie ssh-agent, który musisz uruchomić, aby przekazać klucze ssh. Postępuj zgodnie z tym przewodnikiem, aby skonfigurować automatyczne uruchamianie ssh-agent w systemie Windows.
nebffa
62
Ta odpowiedź prawdopodobnie nie zasługuje na tyle głosów. OP wyraźnie stwierdza, że ​​dodali config.ssh.forward_agentdo swojego pliku konfiguracyjnego, więc jakich nowych informacji dostarcza ta odpowiedź? Nawet link jest już w pytaniu.
Trindaz,
7
@Trindaz masz rację. Nie potrafię wyjaśnić, dlaczego jest to jedna z moich najpopularniejszych odpowiedzi. Jednak pozornie pomogło to przynajmniej 52 osobom, więc muszę to nazwać wygraną.
EnabrenTane
1
Ta odpowiedź rzeczywiście nie dostarcza żadnych nowych informacji, ale z drugiej strony jest to wszystko, co musi zostać skonfigurowane dla maszyny wyposażonej w Vagrant. Przynajmniej pod warunkiem, że przekazywanie agentów jest poprawnie skonfigurowane na maszynie łączącej (tj. Przekazywanie działa na innych maszynach, które nie są włóczęgami).
techraf
20

Oprócz dodania „config.ssh.forward_agent = true” do pliku vagrant upewnij się, że komputer hosta jest skonfigurowany do przekazywania agentów. Github zapewnia dobry przewodnik po tym. (Zapoznaj się z sekcją dotyczącą rozwiązywania problemów).

HipsterHobo
źródło
7

Miałem to działające z powyższymi odpowiedziami na 1.4.3, ale przestałem działać na 1.5. Muszę teraz działać ssh-addw pełni z wersją 1.5.

Na razie dodaję następujący wiersz do mojego skryptu obsługi administracyjnej ansible. - name: Make sure ssk keys are passed to guest. local_action: command ssh-add

Stworzyłem także streszczenie mojej konfiguracji: https://gist.github.com/KyleJamesWalker/9538912

Kyle James Walker
źródło
Zawsze musiałem używać ssh-add z 1.4 i 1.5, ponieważ w przeciwnym razie nie było agenta działającego do przekazania
iheggie
5

Jeśli pracujesz w systemie Windows, przekazywanie SSH w Vagrant nie działa domyślnie (z powodu błędu w net-ssh). Zobacz ten konkretny raport o błędzie Vagrant: https://github.com/mitchellh/vagrant/issues/1735

Istnieje jednak obejście! Po prostu skopiuj automatycznie swój lokalny klucz SSH do maszyny wirtualnej Vagrant za pomocą prostego skryptu aprowizacji w pliku VagrantFile. Oto przykład: https://github.com/mitchellh/vagrant/issues/1735#issuecomment-25640783

Tim Donohue
źródło
2

Kiedy niedawno wypróbowaliśmy vagrant-awswtyczkę w Vagrant 1.1.5, napotkaliśmy problem z przekazywaniem agentów SSH. Okazało się, że Vagrant forsował IdentitiesOnly=yesbez możliwości zmiany na no. To zmusiło Vagranta do spojrzenia tylko na klucz prywatny, który wymieniliśmy w Vagrantfiledostawcy AWS.

Nasze doświadczenia opisałem w poście na blogu . W pewnym momencie może przekształcić się w żądanie ściągnięcia.

Benjamin Oakes
źródło
2
Czy istnieje sposób na zautomatyzowanie kopiowania podstawowego klucza publicznego z komputera głównego do maszyny wirtualnej Vagrant podczas tworzenia za pomocą Vagrant up? W tej chwili muszę stworzyć maszynę, ręcznie zalogować się, a następnie dodać mój klucz publiczny do /home/vagrant/.ssh/authorized_keys
Noah
1

Upewnij się, że maszyna wirtualna nie uruchamia własnego agenta SSH. Miałem tę linię w moim~/.profile

eval `ssh-agent`

Po jego usunięciu działało przekazywanie agentów SSH.

Fabian Schmengler
źródło
0

Prawdziwym problemem jest to, że Vagrant używa standardu 127.0.0.1:2222 jako domyślnego przekierowania portów. Możesz dodać jeden (nie 2222, 2222 jest już domyślnie zajęte)

config.vm.network "forwarded_port", gość: 22, host: 2333, host_ip: "0.0.0.0"

„0.0.0.0” jest sposobem przyjmowania żądań z połączenia zewnętrznego. wtedy ssh -p 2333 [email protected] (zmiana na własny adres IP hosta, dud) będzie działać dobrze. Dziękuj mi, po prostu mów mi Leifeng!

Leifeng
źródło
0

W systemie Windows problem polega na tym, że Vagrant nie wie, jak komunikować się z agentem ssh-agent git-bash. Wie jednak, jak używać Pageant PuTTY. Tak więc, dopóki Pageant działa i załadował twój klucz SSH, i tak długo, jak długo ustawiłeś config.ssh.forward_agent, powinno to działać.

Zobacz ten komentarz, aby uzyskać szczegółowe informacje.

Jeśli używasz Pageant, obejście aktualizacji Vagrantfile w celu skopiowania kluczy SSH w systemie Windows nie jest już konieczne.

Josh Kelley
źródło