¿Cómo utilizar el reenvío de agentes ssh con "vagrant ssh"?

107

En lugar de crear un nuevo par de claves SSH en una caja de vagabundos, me gustaría reutilizar el par de claves que tengo en mi máquina host, utilizando el reenvío de agentes . Intenté configurar config.ssh.forward_agent en TRUE en Vagrantfile, luego reinicié la VM e intenté usar:

vagrant ssh -- -A

... pero todavía se me pide una contraseña cuando intento hacer un pago con git. ¿Alguna idea de lo que me estoy perdiendo?

Matt V.
fuente
Si no tiene sus claves ssh correctamente, git no debería pedirle una contraseña, pero le dirá que ha denegado los permisos. Supongo que se te pide una contraseña porque estás clonando desde https en lugar de [email protected] (ssh). mis 2 centavos.
alexserver

Respuestas:

89

Estoy usando vagrant 2 en 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 es tu clave privada local
  2. Su clave privada debe estar disponible para el agente ssh local. Puede consultar con ssh-add -L, si no está en la lista, agréguelo conssh-add ~/.ssh/id_rsa
  3. No olvide agregar su clave pública a ~/.ssh/authorized_keysVagrant VM. Puede hacerlo copiando y pegando o usando una herramienta como ssh-copy-id
LuizSignorelli
fuente
8
Noté que después de configurar arriba, puedo usar el usuario "vagabundo" para "git clone" pero no puedo usar el usuario "root" para "git clone". ¿Sabes cuál parece ser el problema? Gracias
Nam Nguyen
7
config.ssh.private_key_path = "~/.ssh/id_rsa"hace que Vagrant aguante Waiting for VM to boot.
apennebaker
14
También debe conservar la llave insegura del vagabundoconfig.ssh.private_key_path = [ '~/.vagrant.d/insecure_private_key', '~/.ssh/id_rsa' ]
Calin
3
En OS X, encontré que agregar las claves privadas al llavero de OS X ssh-add -Kfuncionó (y también config.ssh.forward_agent = true). Vea esta respuesta
Flimm
2
Recibí el mismo error que @apennebaker. y seguir los pasos que sugirió Calin no ayudó ... Lo que funcionó para mí fue agregar claves al llavero desde mi sistema operativo host y deshabilitar la asignación config.ssh.private_key_path.
alexserver
80

Agréguelo al Vagrantfile

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

Ver los documentos

EnabrenTane
fuente
11
Asegúrese de ssh-add en el host subyacente y de que la clave esté descifrada.
EnabrenTane
1
Tenga en cuenta que Windows no inicia automáticamente ssh-agent, que debe tener en ejecución para reenviar sus claves ssh. Siga esta guía para configurar el inicio automático de ssh-agent en Windows.
nebffa
62
Esta respuesta probablemente no merezca tantos votos. OP indica claramente que agregaron config.ssh.forward_agenta su archivo de configuración, entonces, ¿qué nueva información proporciona esta respuesta? Incluso el enlace ya está en cuestión.
Trindaz
7
@Trindaz tienes toda la razón. No puedo explicar por qué esta es una de mis respuestas más populares. Sin embargo, esto aparentemente ayudó al menos a 52 personas, así que tengo que llamarlo una victoria.
EnabrenTane
1
De hecho, esta respuesta no trae ninguna información nueva, pero por otro lado es todo lo que necesita configurarse para una máquina aprovisionada por Vagrant. Al menos siempre que tenga el reenvío de agentes configurado correctamente en la máquina de conexión (es decir, el reenvío funciona para otras máquinas no vagabundas).
techraf
20

Además de agregar "config.ssh.forward_agent = true" al archivo vagrant, asegúrese de que la computadora host esté configurada para el reenvío de agentes. Github proporciona una buena guía para esto. (Consulte la sección de solución de problemas).

HipsterHobo
fuente
7

Tenía esto funcionando con las respuestas anteriores en 1.4.3, pero dejé de trabajar en 1.5. Ahora tengo que correr ssh-addpara trabajar completamente con 1.5.

Por ahora agrego la siguiente línea a mi script de aprovisionamiento ansible. - name: Make sure ssk keys are passed to guest. local_action: command ssh-add

También he creado un resumen de mi configuración: https://gist.github.com/KyleJamesWalker/9538912

Kyle James Walker
fuente
Siempre he tenido que usar ssh-add con 1.4 y 1.5, de lo contrario, no había ningún agente en ejecución para ser reenviado
iheggie
5

Si está en Windows, el reenvío SSH en Vagrant no funciona correctamente de forma predeterminada (debido a un error en net-ssh). Vea este informe de error de Vagrant en particular: https://github.com/mitchellh/vagrant/issues/1735

¡Sin embargo, hay una solución! Simplemente copie automáticamente su clave SSH local en la máquina virtual Vagrant a través de un simple script de aprovisionamiento en su VagrantFile. Aquí hay un ejemplo: https://github.com/mitchellh/vagrant/issues/1735#issuecomment-25640783

Tim Donohue
fuente
2

Cuando probamos recientemente el vagrant-awscomplemento con Vagrant 1.1.5, encontramos un problema con el reenvío del agente SSH. Resultó que Vagrant estaba forzando IdentitiesOnly=yessin opción a cambiarlo no. Esto obligó a Vagrant a mirar solo la clave privada que enumeramos en elVagrantfile proveedor de AWS.

Escribí nuestras experiencias en una publicación de blog . Puede convertirse en una solicitud de extracción en algún momento.

Benjamin Oakes
fuente
2
¿Hay alguna manera de automatizar la copia de la clave pública subyacente en la máquina host a la VM Vagrant en la creación Vagrant up? Ahora mismo tengo que crear la máquina, iniciar sesión manualmente y luego agregar mi clave pública a /home/vagrant/.ssh/authorized_keys
Noah
1

Asegúrese de que la VM no inicie su propio agente SSH. Tenía esta línea en mi~/.profile

eval `ssh-agent`

Después de eliminarlo, el reenvío del agente SSH funcionó.

Fabián Schmengler
fuente
0

El verdadero problema es que Vagrant usa 127.0.0.1:2222 como reenvío de puertos predeterminado. Puede agregar uno (no 2222, 2222 ya está ocupado por defecto)

config.vm.network "puerto_enviado", invitado: 22, host: 2333, host_ip: "0.0.0.0"

"0.0.0.0" es una forma de tomar una solicitud desde una conexión externa. luego ssh -p 2333 [email protected] (cambie a su propia dirección IP de host, dud) funcionará bien. ¡Gracias, solo llámame Leifeng!

Leifeng
fuente