Come utilizzare l'inoltro dell'agente ssh con "vagrant ssh"?


107

Piuttosto che creare una nuova coppia di chiavi SSH su una scatola vagabonda, vorrei riutilizzare la coppia di chiavi che ho sulla mia macchina host, utilizzando l' inoltro dell'agente . Ho provato a impostare config.ssh.forward_agent su TRUE nel Vagrantfile, quindi ho riavviato la VM e ho provato a utilizzare:

vagrant ssh -- -A

... ma mi viene ancora richiesta una password quando provo a fare un checkout con git. Qualche idea di cosa mi manchi?


se non hai le chiavi ssh correttamente, git non dovrebbe chiedere una password, ma dirti che hai negato i permessi. Immagino che ti venga richiesta una password perché stai clonando da https invece di git@github.com (ssh). i miei 2 centesimi.
alexserver

Risposte:


89

Sto usando vagrant 2 su 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 è la tua chiave privata locale
  2. La tua chiave privata deve essere disponibile per l'ssh-agent locale. Puoi controllare con ssh-add -L, se non è elencato aggiungilo conssh-add ~/.ssh/id_rsa
  3. Non dimenticare di aggiungere la tua chiave pubblica alla ~/.ssh/authorized_keysVM Vagrant. Puoi farlo copia e incolla o usando uno strumento come ssh-copy-id

8
Ho notato che dopo aver impostato sopra, posso usare l'utente "vagrant" per "git clone" ma non posso usare l'utente "root" per "git clone". Sapete quale sembra essere il problema? Grazie
Nam Nguyen

7
config.ssh.private_key_path = "~/.ssh/id_rsa"fa resistere Vagrant Waiting for VM to boot.
apennebaker

14
Devi anche tenere la chiave di insercure vagabondaconfig.ssh.private_key_path = [ '~/.vagrant.d/insecure_private_key', '~/.ssh/id_rsa' ]
Calin

3
Su OS X, ho trovato l'aggiunta delle chiavi private al portachiavi di OS X con ssh-add -Kfunzionato (oltre a config.ssh.forward_agent = true). Vedi questa risposta
Flimm

2
Ho ricevuto lo stesso errore di @apennebaker. e seguire i passaggi suggeriti da Calin non ha aiutato ... Ciò che ha funzionato per me è stato l'aggiunta di chiavi al portachiavi dal mio sistema operativo host e la disabilitazione dell'assegnazione config.ssh.private_key_path.
alexserver

80

Aggiungilo al Vagrantfile

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

Vedi i documenti


11
Assicurati di aver aggiunto ssh sull'host sottostante e che la chiave sia decrittografata.
EnabrenTane

1
Nota che Windows non avvia automaticamente ssh-agent, che devi avere in esecuzione per inoltrare le tue chiavi ssh. Segui questa guida per configurare l'avvio automatico di ssh-agent su Windows.
nebffa

62
Questa risposta probabilmente non merita così tanti voti. OP afferma chiaramente che hanno aggiunto config.ssh.forward_agental loro file di configurazione, quindi quali nuove informazioni fornisce questa risposta? Anche il link è già nella domanda.
Trindaz

7
@Trindaz hai ragione completo. Non riesco a spiegare perché questa sia una delle mie risposte più popolari. Eppure questo apparentemente ha aiutato almeno 52 persone, quindi devo definirlo una vittoria.
EnabrenTane

1
Questa risposta in effetti non porta nessuna nuova informazione, ma d'altra parte è tutto ciò che deve essere configurato per una macchina con provisioning Vagrant. Almeno a condizione che l'inoltro dell'agente sia impostato correttamente sulla macchina di connessione (ad es. L'inoltro funziona per altre macchine non vagabonde).
techraf

20

Oltre ad aggiungere "config.ssh.forward_agent = true" al file vagrant, assicurati che il computer host sia configurato per l'inoltro dell'agente. Github fornisce una buona guida per questo. (Controlla la sezione risoluzione dei problemi).


7

Ho funzionato con le risposte precedenti su 1.4.3, ma ho smesso di funzionare su 1.5. Ora devo correre ssh-addper lavorare completamente con 1.5.

Per ora aggiungo la seguente riga al mio script di provisioning ansible. - name: Make sure ssk keys are passed to guest. local_action: command ssh-add

Ho anche creato una sintesi della mia configurazione: https://gist.github.com/KyleJamesWalker/9538912


Ho sempre dovuto usare ssh-add con 1.4 e 1.5 perché altrimenti non c'era nessun agente in esecuzione da inoltrare
iheggie

5

Se sei su Windows, l'inoltro SSH in Vagrant non funziona correttamente per impostazione predefinita (a causa di un bug in net-ssh). Vedi questo particolare bug report di Vagrant: https://github.com/mitchellh/vagrant/issues/1735

Tuttavia, c'è una soluzione alternativa! Copia semplicemente automaticamente la tua chiave SSH locale nella VM Vagrant tramite un semplice script di provisioning nel tuo VagrantFile. Ecco un esempio: https://github.com/mitchellh/vagrant/issues/1735#issuecomment-25640783


2

Quando recentemente abbiamo provato il vagrant-awsplugin con Vagrant 1.1.5, abbiamo riscontrato un problema con l'inoltro dell'agente SSH. Si è scoperto che Vagrant stava forzando IdentitiesOnly=yessenza un'opzione per cambiarlo in no. Ciò ha costretto Vagrant a guardare solo la chiave privata che abbiamo elencato nel Vagrantfileprovider AWS.

Ho scritto le nostre esperienze in un post sul blog . Ad un certo punto potrebbe trasformarsi in una richiesta pull.


2
C'è un modo per automatizzare la copia della chiave pubblica sottostante sulla macchina host nella VM Vagrant al momento della creazione con Vagrant up? In questo momento devo creare la macchina, accedere manualmente e quindi aggiungere la mia chiave pubblica a /home/vagrant/.ssh/authorized_keys
Noah

1

Assicurati che la VM non avvii il proprio agente SSH. Avevo questa linea nel mio file~/.profile

eval `ssh-agent`

Dopo averlo rimosso, l'inoltro dell'agente SSH ha funzionato.


0

Il vero problema è che Vagrant usa 127.0.0.1:2222 come port forwarding predefinito. Puoi aggiungerne uno (non 2222, 2222 è già occupato per impostazione predefinita)

config.vm.network "forwarded_port", guest: 22, host: 2333, host_ip: "0.0.0.0"

"0.0.0.0" è un modo per accettare la richiesta dalla connessione esterna. quindi ssh -p 2333 vagrant@192.168.2.101 (modifica al tuo indirizzo IP host, dud) funzionerà perfettamente. Grazie, chiamami Leifeng!


Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.