Pregunta ¿Cómo usar el llavero Mac OS X con las teclas SSH?


Entiendo que desde Mac OS X Leopard, el llavero ha sido compatible con el almacenamiento de claves SSH. ¿Podría alguien explicar cómo se supone que funciona esta característica?

Tengo algunas claves RSA que he generado almacenadas en mi directorio ~ / .ssh para acceder a varios servidores. No tengo frases de contraseña establecidas en esas teclas. Actualmente, para iniciar sesión en esos servidores, utilizo los siguientes comandos en la Terminal:

eval `ssh-agent`
ssh-add ~ / .ssh / some_key_rsa
ssh usuario @ servidor

(He escrito algunas funciones de Bash para que esto sea más fácil).

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


133


origen




Respuestas:


Para que funcione, el $SSH_AUTH_SOCK variable de entorno debe ser apuntado a /tmp/launch-xxxxxx/Listeners. Se supone que debe hacerse automáticamente cuando inicia sesión. El oyente de ese socket habla el protocolo ssh-agent.

Tus scripts bash están comenzando tu propio agente ssh (deletreado ssh-agent, no ssh_agent) y anulando el existente ssh-agent que está configurado para usted al iniciar sesión.

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

Finalmente, cuando inicie sesión por primera vez, probablemente no verá un proceso de ssh-agent. Ese proceso se iniciará automáticamente por los servicios de lanzamiento la primera vez que algo intente leer ese socket en /tmp.


16



Gracias. Así que todavía tendré que correr ssh-add para agregar mis identidades de RSA al agente ssh predeterminado iniciado al iniciar sesión? - John Topley
No es necesario ejecutar ssh-add; ssh-agent solicitará la frase de contraseña de la clave la primera vez que ejecute ssh. - Rudedog
Me está pidiendo la contraseña cada vez que ejecuto ssh. El punto es que no quiero tener que ingresar ninguna contraseña. - John Topley
¿Qué te está pidiendo la contraseña? Estoy empezando a sospechar que es el servidor remoto el que lo está impulsando, lo que pone en su declaración que sus claves no tienen frases clave en una mejor perspectiva. Si desea omitir la contraseña en el servidor remoto, debe agregar su clave pública a $HOME/.ssh/authorized_keys en ese servidor. El ssh-agent + keychain de Mac OS solo se usa para almacenar la contraseña de las claves ssh locales; no está destinado a enviar contraseñas remotas sobre las conexiones ssh existentes. - Rudedog
utilizar ssh -v para diagnosticar lo que está haciendo ssh. también use sshd -p 8900 -v en el lado del servidor y ssh -v remote:8900 para diagnosticar lo que está haciendo sshd. - Rudedog


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 acceso de todas sus claves SSH de forma segura en Keychain, desde donde ssh-agent las leerá al inicio. En resumidas cuentas, es fácil proteger sus claves con frases de contraseña, pero nunca tiene que escribir la frase de contraseña para usarlas. Aquí es cómo:

Agregue la frase de paso a cada clave ssh para llavero: (opción -k solo carga llaves privadas, salta 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 en su llavero se cargarán automáticamente. Debería poder ver las claves en la aplicación de acceso de llavero, así como desde la línea de comando a través de:

ssh-add -l

242



Esta debería ser la respuesta aceptada. - Kris
la respuesta aceptada responde a la pregunta de este usuario específico, pero responde a la pregunta del usuario genérico - eqzx
developer.apple.com/library/mac/documentation/Darwin/Reference/...  También necesita la opción -K para almacenar frases clave en el llavero. - Neeme Praks
Si instaló otra versión de SSH a través de un sistema de paquete como Homebrew, entonces es necesario usar una ruta absoluta como /usr/bin/ssh-add. - Ludovic Kuty
Para macOS Sierra, las cosas han cambiado. Ver github.com/jirsbek/SSH-keys-in-macOS-Sierra-keychain - schieferstapel


A partir de macOS Sierra, ssh-agent ya no carga automáticamente las claves ssh previamente cargadas cuando inicia sesión en su cuenta. Esto es intencional en la parte de Apple, querían volver a alinearse con la corriente principal OpenSSH implementación. [1]


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

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

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


Lo siguiente está en desuso (guardado como referencia).

Para volver al comportamiento anterior, querrá ejecutar el ssh-add -A comando (que carga automáticamente todas las claves ssh que tienen frases de paso en su llavero) cuando inicia sesión. Para hacerlo, siga estos pasos:

  1. Primero, agregue todas las teclas que desea cargar automáticamente al ssh-agent utilizando el ssh-add -K /absolute/path/to/your/private/key/id_rsa mando. los -K argumento asegura que la frase clave se agrega a llavero de macOS. Asegúrese de usar la ruta absoluta a la clave. El uso de una ruta relativa hará que el script de inicio automático no encuentre su clave.

  2. Asegúrese de que todas las claves se muestren como agregadas cuando escribe ssh-add -A.

  3. Crea un archivo llamado com.yourusername.ssh-add.plist en ~/Library/LaunchAgents/ con los contenidos a continuación. Archivos Plist como este es utilizado por launchd para ejecutar scripts cuando inicia sesión [2]  [3]

    <?xml version="1.0" encoding="UTF-8"?>
    <!DOCTYPE plist PUBLIC "-//Apple Computer//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
    <plist version="1.0">
    <dict>
    <key>Label</key>
      <string>com.user.loginscript</string>
    <key>ProgramArguments</key>
      <array>
        <string>ssh-add</string>
        <string>-A</string>
      </array>
    <key>RunAtLoad</key>
      <true/>
    </dict>
    </plist>
    
  4. Contar launchd cargar la archivo plist acabas de crear ejecutando: launchctl load ~/Library/LaunchAgents/com.yourusername.ssh-add.plist.

Y deberías estar todo listo.


70



Relacionado: apple.stackexchange.com/questions/48502/... - slm


Hay una manera más simple que La respuesta de Ricardo para persistir su contraseña entre las sesiones / reinicios de su Mac con 10.12 Sierra.

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

    Host *
      UseKeychain yes
      AddKeysToAgent yes
      IdentityFile ~/.ssh/id_rsa
    

    ¡Ahora la contraseña se recuerda entre reinicios!

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


29



Impresionante, funciona como un encanto, estoy mucho más limpio que los otros y resuelto en el lugar correcto :) - GerardJP


Nota: para macOS Sierra, consulte el más reciente respuesta por ChrisJF.

La [respuesta de Jeff McCarrell] [2] es correcta, excepto que el comando para agregar la frase de paso contiene un guion en vez de un guion, es decir –K en lugar de -K, causando un mensaje al efecto de –K: No such file or directory. Debe leer:

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

9



Esto debería ser un comentario de la respuesta a la que se refiere en lugar de una respuesta nueva. Estamos hablando de seguridad aquí. Uno podría sugerir que debería tipearlo cuidadosamente en lugar de copiar y pegar a ciegas ssh-add -K - Phil_1984_
Usando un guión con K, obtengo illegal option -- K. K en minúsculas aparece como una opción. - Sam Dutton
Gracias por la respuesta. Acabo de comprobar macOS Sierra: -K, es decir, dash-capital-K, sigue siendo válido - simonair


Sospecho que no estás usando el valor predeterminado ssh mando. Tienes ssh instalado a través de los puertos? Tratar which ssh para ver cual ssh comando que estás usando.

Por lo general, debería mostrar un cuadro de diálogo que le pida su contraseña, si aún no está almacenada en su llavero.


6



No estoy usando puertos. - John Topley
Gracias por la información :) Tuve problemas porque estaba usando OpenSSH de Homebrew. - ggustafsson


Tuve un problema similar al intentar iniciar sesión con un certificado ssh del cliente. En este caso específico fue para acceder a un repositorio git. Esta era la situación:

  • La clave se guardó en ~/.ssh/
  • La clave privada tiene una frase de contraseña.
  • La frase de contraseña se almacena 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é a un Mac remoto usando un escritorio remoto, no tuve ningún problema. Sin embargo, cuando me conecté con SSH al Mac remoto, me pidieron la frase de contraseña ssh todo el tiempo. Los siguientes pasos me lo resolvieron.

  1. security unlock-keychain La frase de contraseña se almacena en el llavero de inicio de sesión. Esto lo desbloquea y permite que ssh-agent acceda a él.
  2. eval `ssh-agent -s` Inicia ssh-agent para el uso de shell. Obtendrá la frase de contraseña del llavero y la usará para desbloquear la clave ssh privada.
  3. Establezca la conexión ssh / git y haga mi trabajo.
  4. eval `ssh-agent -k` Mata al agente ssh en ejecución.
  5. security lock-keychain Bloquee el llavero de nuevo.

6



Para que el # 2 funcione para mí dentro de un alias, tuve que usar eval \$(ssh-agent) por Re: inicio de sesión remoto y llavero. Cuando no está dentro de un alias eval $(ssh-agent) trabajos (sin la barra invertida $) - Travis