macOS Sierra parece no recordar las claves SSH entre los reinicios

170

Tengo que ejecutar este comando desde la actualización a macOS:

ssh-add -K

Corrige el problema después del reinicio pero tengo que ejecutar este comando cada vez que inicio sesión en mi computadora.

Si no ejecuto el comando anterior, mis claves en ~/.ssh se omiten y me piden la contraseña del servidor para establecer la conexión.

    
pregunta bisherbas 25.09.2016 - 14:39

10 respuestas

198

A partir de macOS Sierra 10.12.2, Apple agregó una opción ssh_config llamada UseKeychain que permite una resolución "adecuada" al problema. Agregue lo siguiente a su archivo ~/.ssh/config :

Host *
   AddKeysToAgent yes
   UseKeychain yes     

Desde la página ssh_config man en 10.12.2:

  

UseKeychain

     

En macOS, especifica si el sistema debe buscar frases de contraseña en el llavero del usuario cuando intenta usar una clave en particular. Cuando el usuario proporciona la frase de contraseña, esta opción también especifica si la frase de contraseña debe almacenarse en el llavero una vez que se haya verificado que es correcta. El argumento debe ser 'sí' o 'no'. El valor predeterminado es 'no'.

    
respondido por el mluisbrown 15.12.2016 - 14:56
102

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 .

    
respondido por el JakeGould 27.09.2016 - 04:23
14

He escrito una breve publicación sobre este tema que podría ayudarte.

Una solución está llamando al comando ssh-add -A en cada inicio.

Simplemente agregue el archivo .plist con el siguiente contenido a la ruta ~/Library/LaunchAgents/ o cree uno con la aplicación Lingon :

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
    <key>Label</key>
    <string>ssh-add-a</string>
    <key>ProgramArguments</key>
    <array>
        <string>ssh-add</string>
        <string>-A</string>
    </array>
    <key>RunAtLoad</key>
    <true/>
</dict>
</plist>

<!-- @@@@LingonWhatStart:ssh-add -A@@@@LingonWhatEnd -->
    
respondido por el Jirsbek 06.10.2016 - 00:36
14

Como se explica aquí , este es el método recomendado desde macOS 10.12 .2 :

  1. Agregue las siguientes líneas a su archivo ~/.ssh/config :

    Host *
        UseKeychain yes
        AddKeysToAgent yes
    
  2. Cualquier clave que agregue al ssh-agent con el comando ssh-add /path/to/your/private/key/id_rsa se agregará automáticamente al llavero, y se debe cargar automáticamente al reiniciar.

Estoy agregando esta respuesta porque:

  • Otras respuestas le dicen que agregue la línea IdentityFile ~/.ssh/id_rsa , pero esa opción no es necesaria para cargar automáticamente las claves (y en realidad enlazará esa clave en particular para la sección de host a la que la agrega, lo que no querrá) si usa diferentes claves para diferentes hots).
  • La respuesta aceptada menciona UseKeychain , pero eso no es suficiente para conservar las claves en ssh-agent después de un reinicio.
respondido por el Ricardo Sanchez-Saez 06.03.2017 - 22:36
7

Desde macOS 10.12.2 puede usar la opción UseKeychain . Lea más aquí o busque en man ssh_config .

     UseKeychain
         On macOS, specifies whether the system should search for passphrases in the user's keychain
         when attempting to use a particular 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''.

Así que haz lo siguiente:

echo "UseKeychain yes" >> ~/.ssh/config

    
respondido por el Ben 26.01.2017 - 11:22
3

Tuve este problema antes y encontré una manera de evitarlo. Acabo de crear un archivo llamado config en mi carpeta ~/.ssh , donde agregué las siguientes líneas:

Host github.com
HostName github.com
IdentityFile ~/.ssh/github
IdentitiesOnly yes

No estoy seguro de por qué, pero Host y HostName son importantes. En mi caso, si uno de ellos no estaba presente, la solución no funcionó.

Luego, acabo de hacer un ssh-add -K y estaba funcionando incluso después del reinicio.

    
respondido por el Infinity 03.11.2016 - 06:57
2

Encontré que ssh-add -K me dio " opción ilegal - K ". Esto se debió a que ssh-add era una versión extraña de / usr / local / bin (¿instalada por brew?). Pude agregar la clave por el uso específico de ssh-add ubicado en / usr / bin:

/usr/bin/ssh-add -K ~/.ssh/id_rsa
    
respondido por el Fiskabollen 11.10.2016 - 19:54
0

Enmienda ~ / .ssh / config para agregar UseKeyChain para todos los hosts es suficiente para detener esta pesadilla recurrente;)

Host *
 UseKeychain yes

Si el archivo está vacío o no existe, simplemente cree y / o agregue la configuración anterior.

    
respondido por el chim 27.02.2017 - 15:10
0

Actualicé a Mac OS X Sierra (10.12.6). Podría ssh en otros hosts pero no en github.com.

Esto es lo que tuve que insertar en ~ / .ssh / config:

PubkeyAcceptedKeyTypes ssh-dss,ssh-rsa

Después de ese cambio, podría usar github como antes.

    
respondido por el Matthias Bohlen 06.08.2018 - 18:41
0

Si está utilizando una versión diferente de ssh (por ejemplo, instalada a través de homebrew), las soluciones anteriores no funcionarán de manera inmediata. Por ejemplo, las versiones que no son de Apple ssh no reconocen a AddKeysToAgent yes y UseKeychain yes en el archivo .ssh/config y causarán un error. Lo mismo para la opción -A o -K para el cliente ssh .

Eso significa que la respuesta de @mluisbrown no funcionará en absoluto. Puede usar el método 1 de la respuesta de @JakeGould y usar explícitamente la utilidad macOS ssh-add en su .bash_profile para agregar todas las claves al llavero, es decir:

/usr/bin/ssh-add -A

Como se menciona por un comentar arriba , es posible que primero tenga que agregar una clave al llavero: por ejemplo, /usr/bin/ssh-add -K .ssh/github

    
respondido por el n1000 17.06.2017 - 20:02

Lea otras preguntas en las etiquetas