¿Cómo usar la clave privada SSH para iniciar sesión sin ingresar una frase de contraseña cada vez en Mac OS X Lion?

¿Cómo usar la clave privada SSH para iniciar sesión sin ingresar una frase de contraseña cada vez en Mac OS X Lion?

Utilizo Mac OS X Lion e inicio sesión en hosts remotos a través de SSH todos los días. A pesar de que uso un par de claves SSH para la autenticación remota y no necesito motorizar la frase de inicio de sesión de cada host, sigue siendo muy molesto que el terminal solicite la frase de contraseña para acceder a mi clave privada SSH.

Por razones de seguridad, creo que es imprescindible una frase de contraseña para acceder a la clave privada SSH. ¿Hay alguna manera de que el terminal solicite la frase exactamente solo una vez al inicio, luego la memorice y use automáticamente mi clave privada en sesiones SSH posteriores?

Hay un script llamado keychainque funciona bien en Gentoo Linux. Pero nunca lo descubrí en Mac OS X Lion. Es más, hay muchísimos términos intimidantes, como ssh-agent, ssh-add. Después de leer varios materiales sobre esos kits de herramientas SSH y hacer algunos experimentos frustrados, me sentí aún más confundido.

Por lo tanto, vine a StackExchange en busca de algunos consejos sobre las siguientes preguntas.

  1. ¿Qué son ssh-agent, ssh-add, keychainy Keychain Access.appcómo interactúan entre sí?
  2. ¿Cómo puedo ingresar la frase de contraseña para mi clave privada SSH una vez al iniciar sesión y usarla libremente en la creación posterior de una sesión SSH?
  3. Errr... ¿Qué le pasa Keychain Access.app? No almacena la frase SSH como antes.

Enumero lo que he hecho aquí. Ojalá haya pistas sobre los pasos que me salté.

Paso 1. Crear un par de claves SSH en mi Mac.

$ ssh-keygen -t rsa -C "[email protected]"
# Set a passphrase for accessing the private key.

Paso 2. Copie mi clave pública SSH al host remoto. Para dar un ejemplo, copio la clave a localhost, Mac.

$ ssh-copy-id USER@localhost
# Enter the login password for USER at localhost, not my SSH passphrase

Paso 3. Luego intente conectarse al host remoto (aquí localhost), mediante la autenticación de par de claves SSH.

$ ssh USER@locahost
Enter passphrase for key '/Users/YOUR_ACCOUNT/.ssh/id_rsa': 
# Enter my SSH passphrase, not the login password.

Paso 4. Cierre sesión en el host remoto e intente conectarse nuevamente. Joder, el terminal vuelve a pedir la frase SSH.

Una pregunta frecuente es "¿Funciona bien ssh-agent en tu Mac?". Francamente hablando, no tengo idea de lo que está pasando con estas cosas. Aquí se muestran algunos resultados en ejecución.

$ echo $SSH_AUTH_SOCK
/tmp/launch-M48niA/Listeners
$ echo $SSH_AUTH_PID
(EMPTY)
$ ssh-add -l
Could not open a connection to your authentication agent.
$ ssh-agent
SSH_AUTH_SOCK=/tmp/ssh-Z54zXukQiP/agent.26769; export SSH_AUTH_SOCK;
SSH_AGENT_PID=26770; export SSH_AGENT_PID;
echo Agent pid 26770;
$ ssh-add -l
Could not open a connection to your authentication agent.
$ echo $SSH_AUTH_SOCK
/tmp/launch-M48niA/Listeners
$ echo $SSH_AUTH_PID
(STILL EMPTY)
$ ssh-agent  # Oh no, anther ssh-agent with different PID
SSH_AUTH_SOCK=/tmp/ssh-cx0B4FUX8B/agent.26898; export SSH_AUTH_SOCK;
SSH_AGENT_PID=26899; export SSH_AGENT_PID;
echo Agent pid 26899;
$ ps -e | grep -i ssh
26769 ??         0:00.03 ssh-agent
26899 ??         0:00.02 ssh-agent

Cualquier comentario es bienvenido. ¡Gracias!

Respuesta1

ssh-agentes la pieza que quieres que funcione, ya que hace exactamente lo que estás preguntando. El agente se ejecuta como un demonio y cuando le "agrega" una clave privada, recuerda esa clave y se la proporciona automáticamente al control remoto sshddurante la conexión inicial. ( ssh-addes simplemente el comando que ejecuta para agregar manualmente una clave privada ssh-agent).

En OS X, a partir de Leopard, nunca deberías tener que ejecutarlo ssh-agentmanualmente ssh-add. Debería "simplemente suceder" cuando intenta conectarse a un servidor. Una vez por clave, le solicitará un cuadro de diálogo de contraseña de UI, que (entre otras cosas) le permitirá agregar automáticamente la clave para ssh-agentque nunca más se le solicite.

Esto se maneja teniendo una launchdconfiguración que escucha las conexiones en el $SSH_AUTH_SOCKsocket y se inicia automáticamente ssh-agentcuando es necesario; después de eso, ssh-agentle solicita las credenciales solo cuando necesita abrir una nueva clave.

Si eso no funciona, asegúrese de tener launchdpresente el archivo de configuración correcto:

/System/Library/LaunchAgents/org.openbsd.ssh-agent.plist

Si todavía no funciona por algún motivo, esta es la forma "antigua" de hacer que todo funcione manualmente:

http://timesinker.blogspot.com/2007/08/getting-ssh-agent-going-on-mac-osx.html

También está esta aplicación, que dejé de usar desde que salió Leopard pero básicamente hacía lo mismo en versiones anteriores de Mac OS X:

http://www.sshkeychain.org/

Respuesta2

Durante el proceso de resolución del "problema", busqué en Google algunos temas relacionados y escribí algunas notas sobre cómo ssh-agent, ssh-add, keychain,KeyChain Access.app . Finalmente resulta que este problema no es un problema en absoluto, sino que el problema tiene que ver conmigo, y así se llama.ssh-iniciar-sesión-sin-pedir-contraseña-cada-vezFunciona perfectamente en Mac desde el primer momento.

Sin embargo, este proceso me gana algunas experiencias. Escribo mis notas aquí con la esperanza de que ayuden a alguien a confundirse con esos términos.

Dos términos de contraseña:

  • passphrasese refiere a la frase requerida al acceder a su clave privada SSH.
  • passwordse refiere a la frase requerida para iniciar sesión en su Mac.

Ahora puedo descubrir qué hacen estos kits de herramientas, es decir , ssh-agenten ssh-addMac .keychainKeychain Access.app

  • ssh-agentes el servicio fundamental para permitir el uso de la clave privada SSH sin escribir la frase de contraseña SSH.ssh-agent funciona de esta manera. Primero almacena, ocache, su clave privada SSH en la memoria principal. Luego, en un momento posterior de esta sesión, cuando se necesite su clave SSH privada para la autenticación remota, ssh-agentencontrará su clave privada en la memoria principal y se la entregará al proceso remoto. La única posibilidad de que se le solicite que escriba su frase de contraseña SSH es cuando agrega ssh-agentinicialmente su clave privada.
  • ssh-addes parte de ssh-agentla colección, que ayuda a administrar sus claves SSH en formato ssh-agent. Usamos ssh-addel comando para enumerar, agregar y eliminar claves privadas en el conjunto de claves de ssh-agent. Luego ssh-addse comunica con ssh-agentel servicio para cumplir con las tareas.
  • keychaines un script para buscar ssh-agentel servicio (si no existe, inicie uno nuevo) y llame ssh-addpara agregar claves privadas SSH. keychaintiene una idea simple y directa, que funciona bien en Linux, donde ssh-agent generalmente no se inicia automáticamente.
  • Keychain Access.appParece ser el componente más complicado. Es el servicio universal de almacenamiento de tokens de Mac OS X. Almacena varios tokens, como contraseñas, certificados, etc., y sirve como token.agentepara aquellas aplicaciones que solicitan los tokens. En nuestro caso de clave privada SSH, primero capta la solicitud de acceso a la clave privada SSH y abre una ventana para pedirle que almacene la frase de contraseña SSH, que es una especie de token, en el Keychain Access.appconjunto de claves. Luego, la próxima vez que vaya a utilizar claves privadas para la autenticación, Keychain Access.appaparecerá nuevamente una ventana que le preguntará si otorga el privilegio. Después de recibir un gran sí, keychain Access.appagrega tu clave privada al ssh-agentalmacenamiento de.

Dos cosas merecen su atención:

  1. Mac OS X Lion inicia automáticamente un ssh-agentservicio al inicio, escuchando en un socket bajo /tmp.
  2. Keychain Access.appalmacena su frase de contraseña SSH, para que pueda agregar su clave privada ssh-agentsin interrumpirlo. Sí, no es necesario escribir su frase SSH, pero sí debe escribir la contraseña de inicio de sesión de su cuenta Mac para otorgar privilegios al crear esta entrada por primera vez.

Entonces, en resumen,El inicio de sesión SSH sin pedir contraseña debería funcionar en Mac OS X desde el primer momento.

Respuesta3

En caso de que otras soluciones aquí no funcionen para las personas, la siguiente funcionó para mí.

Para todas y cada una de las claves privadas en su directorio ~/.ssh, asegúrese de que la clave pública correspondiente también esté presente. Asegúrese de que la clave pública tenga exactamente el mismo nombre que la clave privada pero con el .pubnombre al final. Si ya tenía una clave pública adecuada, intente regenerarla.

Si necesita recrear las claves públicas, puede hacerlo fácilmente: –

ssh-keygen -y -f ~/.ssh/my_key > ~/.ssh/my_key.pub

reemplazando my_keycon como se llame su clave.

Después de eso, MacOS recuerda la frase de contraseña clave en el llavero como debería.

Nota: ingresar la frase de contraseña y guardarla en el llavero ahora es una acción que se realiza una sola vez (no una vez por sesión de inicio de sesión como quería OP), pero suponiendo que el inicio de sesión en la Mac en cuestión esté protegido con contraseña, entonces su frase de contraseña estará protegida por esa contraseña de inicio de sesión. Además, esta solución no tiene sentido para mí... no debería ser necesaria una clave pública además de la clave privada, pero por alguna razón MacOSX la requiere.

(originalmente derespuestaa una pregunta similar en Apple Stack Exchange)

Respuesta4

Otra cosa que podrías haber probado sería reemplazar ssh-copy-idcon algo como .k="$(cat ~/.ssh/id_rsa.pub)"; ssh [email protected] "umask 0077; mkdir -p ~/.ssh; echo "$k" >> ~/.ssh/authorized_keys2"

información relacionada