229 votos

MacOS Sierra no parece recordar las claves SSH entre reinicios

Tengo que ejecutar este comando desde que me actualicé a MacOS:

ssh-add -K

Corrige el problema tras el reinicio pero tengo que ejecutar este comando cada vez que me conecto a mi ordenador.

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

260voto

Parrots Puntos 190

A partir de macOS Sierra 10.12.2 Apple ha añadido un ssh_config opción llamada UseKeychain que permite una resolución "adecuada" del problema. Añada lo siguiente a su ~/.ssh/config archivo:

Host *
   AddKeysToAgent yes
   UseKeychain yes     

Desde el ssh_config man página en 10.12.2:

UseKeychain

En MacOS, especifica si el sistema debe buscar frases de contraseña en el llavero del usuario cuando se intenta utilizar una clave concreta. Cuando la frase de contraseña es proporcionada por el usuario, esta opción también especifica si la frase de contraseña debe ser almacenada en el llavero una vez que se haya verificado que es correcta. El argumento debe ser "sí" o "no". El valor por defecto es "no".

124voto

JakeGould Puntos 1926

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 .

24voto

nardi Puntos 58

Como se explica aquí Este es el método recomendado, ya que MacOS 10.12.2 :

  1. Añade las siguientes líneas a tu ~/.ssh/config archivo:

    Host *
        UseKeychain yes
        AddKeysToAgent yes
  2. Cualquier clave que se añada al ssh-agent utilizando el ssh-add /path/to/your/private/key/id_rsa se añadirá automáticamente al llavero y se cargará automáticamente al reiniciar.


Agrego esta respuesta porque:

  • Otras respuestas le dicen que añada el IdentityFile ~/.ssh/id_rsa pero esa opción no es necesaria para la autocarga de las claves (y en realidad vinculará esa clave particular para la sección del host a la que la añadas, lo que no querrás si utilizas diferentes claves para diferentes hots).
  • La respuesta aceptada menciona UseKeychain pero eso no es suficiente para que las claves persistan en ssh-agent después de un reinicio.

16voto

Tom Puntos 1

He escrito un breve post sobre este tema que podría ayudarte.

Una solución es llamar a ssh-add -A en cada inicio.

Sólo hay que añadir .plist con el siguiente contenido a la ruta ~/Library/LaunchAgents/ o crear uno con Lingon app:

<?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 -->

8voto

Ben Puntos 181

Desde MacOS 10.12.2 se puede utilizar la función UseKeychain opción. Lea más aquí o buscar 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

AppleAyuda.com

AppleAyuda es una comunidad de usuarios de los productos de Apple en la que puedes resolver tus problemas y dudas.
Puedes consultar las preguntas de otros usuarios, hacer tus propias preguntas o resolver las de los demás.

Powered by:

X