2009-12-28 12:08:48 +0000 2009-12-28 12:08:48 +0000
143
143

¿Cómo utilizar el llavero de Mac OS X con claves SSH?

Tengo entendido que desde Mac OS X Leopard el llavero soporta el almacenamiento de claves SSH. ¿Podría alguien explicar cómo se supone que funciona esta función?

Tengo algunas claves RSA que he generado almacenadas en mi directorio ~/.ssh para acceder a varios servidores. No tengo frases de paso establecidas en esas claves. Actualmente, para acceder a esos servidores uso los siguientes comandos en la Terminal:

eval `ssh-agent` ssh-add ~/.ssh/some\_key\_rsa ssh user@server

(he escrito algunas funciones de Bash para hacer esto más fácil.)

¿Hay una mejor manera de hacer esto usando el Llavero?

Respuestas (9)

255
255
255
2011-04-11 19:58:42 +0000

A partir de la versión Leopard de OS X, ssh-agent está más estrechamente integrado con Keychain. Es posible almacenar las frases de contraseña de todas sus claves SSH de forma segura en Keychain, desde donde ssh-agent las leerá al iniciar. El resultado es que es sencillo asegurar sus claves con frases de paso, ¡pero nunca tendrá que escribir la frase de paso para usarlas! Aquí está cómo:

Agregue la frase de paso a cada llave ssh al llavero: (la opción -k sólo carga las claves privadas simples, omite los certificados)

ssh-add -K [path/to/private SSH key]

(tenga en cuenta que es una K mayúscula)

Cada vez que reinicie su Mac, todas las claves SSH de su llavero se cargarán automáticamente. Debería poder ver las claves en la aplicación Keychain Access, así como desde la línea de comandos a través de:

ssh-add -l
82
82
82
2016-12-12 18:17:44 +0000

A partir de macOS Sierra, ssh-agent ya no autocarga las claves ssh previamente cargadas cuando te conectas a tu cuenta. Esto es intencional por parte de Apple, ellos querían re-alinearse con la implementación de OpenSSH. [1]

  • *

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

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

  2. Cualquier clave que añada al ssh-agent utilizando el comando ssh-add /path/to/your/private/key/id_rsa se añadirá automáticamente al llavero, y debería cargarse automáticamente al reiniciar.

  • *

Lo siguiente es obsoleto (se mantiene como referencia).

Para volver al comportamiento anterior, querrá ejecutar el comando ssh-add -A (que autocarga todas las claves ssh que tienen frases de paso en su llavero) cuando inicie la sesión. Para ello, sigue estos pasos:

  1. Primero, añade todas las claves que quieras autocargar al ssh-agent utilizando el comando ssh-add -K /absolute/path/to/your/private/key/id_rsa. El argumento -K garantiza que la frase de paso de la llave se añada al llavero de macOS. Asegúrese de utilizar la ruta absoluta de la llave. El uso de una ruta relativa hará que el script auto-lanzado no encuentre su llave.

  2. Asegúrese de que todas sus llaves se muestren como añadidas cuando escriba ssh-add -A.

  3. Cree un archivo llamado com.yourusername.ssh-add.plist en ~/Library/LaunchAgents/ con el contenido siguiente. Los archivos Plist como éste son utilizados por launchd para ejecutar scripts cuando usted se conecta. [2] [3]

  4. Dígale a launchd que cargue el archivo plist que acaba de crear ejecutando launchctl load ~/Library/LaunchAgents/com.yourusername.ssh-add.plist.

Y ya debería estar todo listo.

34
34
34
2017-01-05 18:53:54 +0000

Hay una forma más sencilla que la respuesta de Ricardo para persistir tu contraseña entre sesiones/reinicios de tu Mac con 10.12 Sierra.

  1. ssh-add -K ~/.ssh/id_rsa Nota: cambie la ruta donde se encuentra su clave id_rsa.
  2. ssh-add -A
  3. Cree (o edite si existe) el siguiente archivo ~/.ssh/config:

Apple ha cambiado a propósito el comportamiento de ssh-agent en macOS 10.12 Sierra para que ya no cargue automáticamente las claves SSH anteriores, tal y como se indica en este OpenRadar , discusión en Twitter , y Nota técnica de Apple . La solución anterior imitará el antiguo comportamiento de El Capitán y recordará su contraseña.

17
17
17
2009-12-28 17:37:32 +0000

Para que funcione, la variable de entorno $SSH_AUTH_SOCK debe apuntar a /tmp/launch-xxxxxx/Listeners. Se supone que esto se hace automáticamente cuando te conectas. El oyente en ese socket habla el protocolo ssh-agent.

Sus scripts bash están iniciando su propio agente ssh (deletreado ssh-agent, no ssh_agent) y anulando el ssh-agent existente que se configura para usted al iniciar la sesión.

Además, el objetivo del llavero es almacenar las contraseñas de sus claves ssh, pero usted dice que no tiene frases de paso establecidas en esas claves, así que no estoy seguro de lo que espera de la integración del llavero.

Por último, cuando te conectes por primera vez, probablemente no verás un proceso de ssh-agent. Ese proceso será iniciado automáticamente por los servicios de lanzamiento la primera vez que algo intente leer ese socket en /tmp.

10
10
10
2011-04-28 13:28:40 +0000

Nota: para macOS Sierra, consulte la más reciente respuesta de ChrisJF .

La [respuesta de Jeff McCarrell][2] es correcta, salvo que el comando para añadir la frase de paso contiene un guión en lugar de un guión, es decir, –K en lugar de -K, lo que provoca un mensaje al efecto de –K: No such file or directory. Debería decir:

ssh-add -K [path/to/private SSH key]
6
6
6
2013-10-14 12:29:41 +0000

Tuve un problema similar al intentar iniciar sesión usando un certificado ssh de cliente. En este caso concreto era para acceder a un repositorio git. Esta era la situación

  • La clave fue guardada en ~/.ssh/
  • La clave privada tiene una frase de paso.
  • La frase de contraseña se guarda en el llavero de inicio de sesión de OS X. ~/Library/Keychains/login.keychain
  • La conexión fue la siguiente: mi mac -> mac remoto -> servidor git/ssh
  • Mac OS X 10.8.5

Cuando me conecté al mac remoto usando el escritorio remoto, no tuve ningún problema. Sin embargo, al conectarme con SSH al mac remoto, me pedía la frase de contraseña ssh cada vez. Los siguientes pasos me lo solucionaron.

  1. security unlock-keychain La frase de contraseña se almacena en el llavero de inicio de sesión. Esto la desbloquea y permite que ssh-agent acceda a ella.
  2. evalssh-agent -s`` Inicia ssh-agent para el uso del shell. Obtendrá la frase de contraseña del llavero y la utilizará para desbloquear la clave ssh privada.
  3. Establecer la conexión ssh/git y hacer mi trabajo.
  4. evalssh-agent -k`` Matar el ssh-agent en ejecución.
  5. security lock-keychain Vuelve a bloquear el llavero.
6
6
6
2009-12-28 12:55:13 +0000

Sospecho que no estás usando el comando ssh por defecto. ¿Tienes el ssh instalado a través de los puertos? Prueba con which ssh para ver qué comando ssh estás utilizando.

Normalmente debería aparecer un cuadro de diálogo pidiendo tu contraseña, si no está ya almacenada en tu llavero.

4
4
4
2014-03-26 09:45:49 +0000

Ver también:

security import priv_key.p12 -k ~/Library/Keychains/login.keychain
security import pub_key.pem -k ~/Library/Keychains/login.keychain

… añadiendo esta nota ya que se pidió más detalle: el comando “security” es capaz de importar claves (y otras cosas) directamente a los llaveros. Lo bueno es que a diferencia de ssh-add, se puede especificar el llavero. Esto hace posible importar directamente en el llavero del sistema (“man security” para aprender cómo)

1
1
1
2017-01-26 10:39:16 +0000

La mejor solución y la prevista por Apple (desde macOS 10.12.2) está descrita aquí

Así que haga lo siguiente:

echo “UseKeychain yes” >> ~/.ssh/config