Yo también tuve este problema al intentar desplegar un código usando Capistrano . Muy frustrante. Aquí hay dos métodos que conozco para lidiar con este problema.
Método 1: Añadir todos los conocidos al agente SSH.
Así que una solución que encontré es ejecutar ssh-add
con el -A
que añade todas las identidades conocidas al agente SSH utilizando cualquier frase de contraseña almacenada en su llavero, como ésta:
ssh-add -A
Ahora esto funciona pero no persiste a través de los reinicios. Así que si quieres no volver a preocuparte por esto, simplemente abre la carpeta de tu usuario ~/.bash_profile
archivo como este:
nano ~/.bash_profile
Y añade esta línea al final:
ssh-add -A 2>/dev/null;
Ahora, cuando abra una nueva ventana de Terminal, todo debería estar bien.
Método 2: Añadir sólo las claves SSH que están en el llavero al agente.
Así que mientras el ssh-add -A
debería funcionar para la mayoría de los casos básicos, recientemente me encontré con un problema en el que tenía 6-7 cajas Vagrant (que utiliza claves/identidades SSH para el acceso) configuradas en una máquina encima de la más común id_rsa.pub
en su lugar.
Resumiendo, acabé bloqueado en un servidor remoto debido a demasiados intentos fallidos basados en claves/identidades SSH, ya que el acceso al servidor se basaba en una contraseña y las claves/identidades SSH son claves/identidades SSH. Así que el agente SSH intentó todo de mis claves SSH, falló y ni siquiera pude llegar al prompt de la contraseña.
El problema es que ssh-add -A
añadirá arbitrariamente cada una de las claves/identidades SSH que tenga al agente, incluso si no es necesario hacerlo; como en el caso de las cajas Vagrant.
Mi solución después de muchas pruebas fue la siguiente.
En primer lugar, si tiene más claves/identidades SSH añadidas a su agente de las que necesita -como se muestra con ssh-add -l
y luego purgarlos todos del agente así:
ssh-add -D
Una vez hecho esto, inicie el agente SSH como un proceso en segundo plano de esta manera:
eval "$(ssh-agent -s)"
Ahora, la cosa se pone rara y no sé muy bien por qué. En algunos casos se puede añadir específicamente el ~/.ssh/id_rsa
clave/identidad al agente así:
ssh-add ~/.ssh/id_rsa
Escriba su frase de acceso, pulse Return y deberías estar listo para ir.
Pero en otros casos basta con ejecutar esto para que se añada la clave/identidad:
ssh-add -K
Si todo ha funcionado, escriba ssh-add -l
y debería ver una única clave/identidad SSH en la lista.
¿Todo bien? Ahora abre tu .bash_profile
:
nano ~/.bash_profile
Y añade esta línea al final; comenta o elimina el -A
versión si lo tiene en su lugar:
ssh-add -K 2>/dev/null;
Esto permitirá que la clave/identidad SSH se recargue en el agente SSH en cada arranque/reinicio.
ACTUALIZACIÓN: Apple ha añadido un UseKeychain
a las opciones de configuración de SSH abierto y considera ssh-add -A
una solución también.
A partir de MacOS Sierra 10.12.2, Apple ha añadido un UseKeychain
opción de configuración para la configuración de SSH. Comprobando la página man (a través de man ssh_config
) muestra la siguiente información:
UseKeychain
On macOS, specifies whether the system should search for
passphrases in the user's keychain when attempting to use a par-
ticular key. When the passphrase is provided by the user, this
option also specifies whether the passphrase should be stored
into the keychain once it has been verified to be correct. The
argument must be ``yes'' or ``no''. The default is ``no''.
Lo que se reduce a que Apple ve la solución como añadir ssh-add -A
a su .bash_profile
como se explica en este ticket de Open Radar o añadiendo UseKeychain
como una de las opciones en un por usuario ~/.ssh/config
.