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 keychain
que 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.
- ¿Qué son
ssh-agent
,ssh-add
,keychain
yKeychain Access.app
cómo interactúan entre sí? - ¿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?
- 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-agent
es 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 sshd
durante la conexión inicial. ( ssh-add
es 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-agent
manualmente 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-agent
que nunca más se le solicite.
Esto se maneja teniendo una launchd
configuración que escucha las conexiones en el $SSH_AUTH_SOCK
socket y se inicia automáticamente ssh-agent
cuando es necesario; después de eso, ssh-agent
le solicita las credenciales solo cuando necesita abrir una nueva clave.
Si eso no funciona, asegúrese de tener launchd
presente 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:
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:
passphrase
se refiere a la frase requerida al acceder a su clave privada SSH.password
se refiere a la frase requerida para iniciar sesión en su Mac.
Ahora puedo descubrir qué hacen estos kits de herramientas, es decir , ssh-agent
en ssh-add
Mac .keychain
Keychain Access.app
ssh-agent
es 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-agent
encontrará 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 agregassh-agent
inicialmente su clave privada.ssh-add
es parte dessh-agent
la colección, que ayuda a administrar sus claves SSH en formatossh-agent
. Usamosssh-add
el comando para enumerar, agregar y eliminar claves privadas en el conjunto de claves de ssh-agent. Luegossh-add
se comunica conssh-agent
el servicio para cumplir con las tareas.keychain
es un script para buscarssh-agent
el servicio (si no existe, inicie uno nuevo) y llamessh-add
para agregar claves privadas SSH.keychain
tiene una idea simple y directa, que funciona bien en Linux, donde ssh-agent generalmente no se inicia automáticamente.Keychain Access.app
Parece 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 elKeychain Access.app
conjunto de claves. Luego, la próxima vez que vaya a utilizar claves privadas para la autenticación,Keychain Access.app
aparecerá nuevamente una ventana que le preguntará si otorga el privilegio. Después de recibir un gran sí,keychain Access.app
agrega tu clave privada alssh-agent
almacenamiento de.
Dos cosas merecen su atención:
- Mac OS X Lion inicia automáticamente un
ssh-agent
servicio al inicio, escuchando en un socket bajo/tmp
. Keychain Access.app
almacena su frase de contraseña SSH, para que pueda agregar su clave privadassh-agent
sin 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 .pub
nombre 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_key
con 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-id
con algo como .k="$(cat ~/.ssh/id_rsa.pub)"; ssh [email protected] "umask 0077; mkdir -p ~/.ssh; echo "$k" >> ~/.ssh/authorized_keys2"