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 todas las claves conocidas al agente SSH.
Una de las soluciones que he encontrado es ejecutar ssh-add
con la opción -A
-que añade todas las identidades conocidas al agente SSH usando cualquier frase de contraseña almacenada en su llavero-como esto:
ssh-add -A
Ahora esto funciona pero no persistirá a través de los reinicios. Así que si quieres no volver a preocuparte por esto, simplemente abre el archivo ~/.bash_profile
de tu usuario así:
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.
Mientras que la opción ssh-add -A
debería funcionar para la mayoría de los casos básicos, me encontré con un problema recientemente en el que tenía 6-7 cajas de Vagrant (que utiliza claves/identidades SSH para el acceso) configuradas en una máquina además 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 estaba basado en una contraseña y las claves/identidades SSH son claves/identidades SSH. Así que el agente SSH intentó todas mis claves SSH, falló y no pude ni siquiera 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 tengas 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
entonces purgue todas ellas del agente de esta manera:
ssh-add -D
Una vez hecho esto, inicie el agente SSH como un proceso en segundo plano de la siguiente manera
eval "$(ssh-agent -s)"
Ahora, la cosa se pone rara y no estoy muy seguro de por qué. En algunos casos puedes añadir específicamente la clave/identidad ~/.ssh/id_rsa.pub
al agente así:
ssh-add ~/.ssh/id_rsa.pub
Escriba su frase de contraseña, pulse Return y debería estar listo.
Pero en otros casos basta con ejecutar esto para que se añada la clave/identidad:
ssh-add -K
Si todo ha funcionado, teclea ssh-add -l
y deberías ver una única clave/identidad SSH en la lista.
¿Todo bien? Ahora abre tu .bash_profile
:
nano ~/.bash_profile
Y añada esta línea al final; comente o elimine la versión -A
si la tiene:
ssh-add -K 2>/dev/null;
Eso permitirá que la clave/identidad SSH se recargue en el agente SSH en cada arranque/reinicio.
ACTUALIZACIÓN: Apple ha añadido ahora una opción UseKeychain
a las opciones de configuración de SSH abierto y considera que ssh-add -A
también es una solución.
A partir de macOS Sierra 10.12.2, Apple (supongo) ha añadido una opción de configuración UseKeychain
para las configuraciones 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ñadir UseKeychain
como una de las opciones en un ~/.ssh/config
por usuario.