También tuve este problema al intentar implementar algún código usando Capistrano . Muy frustrante. Aquí hay dos métodos que conozco para tratar este problema.
Método 1: agregue todas las claves conocidas al agente de SSH.
Una de las soluciones que encontré es ejecutar ssh-add
con la opción -A
, que agrega todas las identidades conocidas al agente de SSH usando cualquier frase de contraseña almacenada en su llavero, como esta:
ssh-add -A
Ahora esto funciona, pero no persistirá en los reinicios. Entonces, si no quiere volver a preocuparse por esto, simplemente abra el archivo ~/.bash_profile
de su usuario de esta manera:
nano ~/.bash_profile
Y agrega esta línea al final:
ssh-add -A 2>/dev/null;
Ahora, cuando abres una nueva ventana de Terminal, ¡todo debería estar bien!
Método 2: agregue solo las claves SSH que están en el llavero al agente.
Entonces, mientras que la opción ssh-add -A
debería funcionar para la mayoría de los casos básicos, recientemente tuve un problema en el que tenía 6-7 cajas de Vagrant (que usan claves / identidades SSH para el acceso) configuradas en una máquina en la parte superior de más id_rsa.pub
común en su lugar.
En pocas palabras, terminé siendo bloqueado de 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 de SSH probó todas de mis claves SSH, falló y ni siquiera pude acceder a la solicitud de contraseña.
El problema es que ssh-add -A
solo agregará arbitrariamente cada clave / identidad SSH única 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.
Primero, si tiene más claves / identidades SSH agregadas a su agente de las que necesita, como se muestra con ssh-add -l
, purguelas todas del agente, por lo que:
ssh-add -D
Una vez hecho esto, inicie el agente SSH como un proceso en segundo plano, así:
eval "$(ssh-agent -s)"
Ahora, se pone raro y no estoy muy seguro de por qué. En algunos casos, puede agregar específicamente la clave / identidad ~/.ssh/id_rsa
al agente así:
ssh-add ~/.ssh/id_rsa
Escribe tu contraseña, pulsa Volver y deberías estar listo.
Pero en otros casos, simplemente ejecutando esto es suficiente para obtener la clave / identidad agregada:
ssh-add -K
Si todo está funcionando, escriba ssh-add -l
y debería ver una clave / identidad SSH solitaria en la lista.
¿Todo bien? Ahora abre tu .bash_profile
:
nano ~/.bash_profile
Y agrega esta línea al fondo; comente o elimine la versión -A
si tiene eso en su lugar:
ssh-add -K 2>/dev/null;
Eso permitirá que la clave / identidad SSH se vuelva a cargar al agente SSH en cada inicio / reinicio.
ACTUALIZACIÓN: Apple ahora ha agregado una opción UseKeychain
a las opciones de configuración abiertas de SSH y también considera ssh-add -A
una solución.
A partir de macOS Sierra 10.12.2, Apple ha agregado una opción de configuración UseKeychain
para configuraciones SSH. Al revisar la página del manual (a través de man ssh_config
) se 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''.
Esto se reduce a que Apple vea que la solución agrega ssh-add -A
a su .bash_profile
como se explica en este ticket de Open Radar o agregar UseKeychain
como una de las opciones en por usuario ~/.ssh/config
.