Uso Mac OS X Lion e inicio de sesión en hosts remotos a través de SSH todos los días. A pesar de que uso el 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 necesaria una frase de contraseña para acceder a la clave privada SSH. ¿Hay alguna forma de hacer 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 descubro en Mac OS X Lion. Lo que es más, hay tantos términos de intimidación, como ssh-agent, ssh-add. Después de leer varios materiales sobre esos kits de herramientas SSH y hacer algunos experimentos frustrados, me confundí más.
Por lo tanto, vine a StackExchange, en busca de algunos consejos sobre las siguientes preguntas.
- ¿Cuáles son
ssh-agent,ssh-add,keychain,Keychain Access.appy 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 la sesión SSH?
- Errr ... ¿Qué tiene de malo
Keychain Access.app? No almacena la frase SSH como lo hizo antes.
Enumero lo que he hecho aquí. Esperemos que haya pistas sobre los pasos que me perdí.
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 tomar 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 intenta conectarte al host remoto (localhost aquí), a través de 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. Maldita sea, la terminal vuelve a pedir la frase SSH.
Una pregunta frecuente es que "¿ssh-agent funciona bien en tu Mac?". Hablando francamente, no tengo idea de lo que está pasando con estas cosas. Aquí se muestran algunos resultados corrientes.
$ 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!

Respuestas:
ssh-agentes la pieza que desea que funcione, ya que hace exactamente lo que está 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 remotosshddurante la conexión inicial. (ssh-addes simplemente el comando que ejecuta para agregar manualmente una clave privadassh-agent).En OS X, a partir de Leopard, nunca deberías tener que ejecutarlo
ssh-agentnissh-addmanualmente. Debería "suceder" cuando intentas conectarte a un servidor. Una vez por cada clave, le solicitará un cuadro de diálogo de contraseña de UI, que (entre otras cosas) le permitirá agregar automáticamente la clave parassh-agentque nunca más se le solicite.Esto se maneja teniendo una
launchdconfiguración que escuche las conexiones en el$SSH_AUTH_SOCKzócalo y se inicie automáticamentessh-agentcuando sea necesario; después de eso, lessh-agentsolicita credenciales solo cuando necesita abrir una nueva clave.Si eso no funciona, asegúrese de tener
launchdpresente el archivo de configuración correcto :Si todavía no funciona para usted por alguna razón, esta es la forma "antigua" de hacer que las cosas funcionen a mano:
http://timesinker.blogspot.com/2007/08/getting-ssh-agent-going-on-mac-osx.html
También existe esta aplicación, que he dejado de usar desde que salió Leopard, pero básicamente hice lo mismo en versiones anteriores de Mac OS X:
http://www.sshkeychain.org/
fuente
~/tmpseñalaba/tmp/y ejecuté un trabajo cron para limpiar~/tmpcada 2 horas, lo que también eliminó el socket ssh-agent. Oh hombre, me odio a mí mismo.Durante el proceso de resolver el "problema", he buscado en Google algunos temas relacionados y escribo algunas notas acerca de cómo
ssh-agent,ssh-add,keychain,KeyChain Access.apptrabajo. Finalmente resulta que este problema no es un problema en absoluto, sino que se trata de mí, y el llamado ssh-login-without-ask-passphrase-every-time funciona perfectamente en Mac fuera de la caja.Sin embargo, este proceso me da 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 me puedo imaginar lo que estas herramientas hacen, es decir,
ssh-agent,ssh-add,keychain,Keychain Access.appen Mac.ssh-agentes el servicio crítico para habilitar el uso de la clave privada SSH sin escribir la frase de contraseña SSH.ssh-agentFunciona de esta manera. Primero almacena, o almacena en caché , su clave privada SSH en la memoria principal. Luego, más adelante en esta sesión, cuando se necesite su clave SSH privada SSH para la autenticación remota,ssh-agentencontrará su clave privada en la memoria principal y la entregará al proceso remoto. La única posibilidad de que te pidan que escribas tu frase de contraseña SSH es cuandossh-agentinicialmente se agrega tu clave privada .ssh-addes parte de lassh-agentcolección, que ayuda a administrar sus claves SSHssh-agent. Usamos elssh-addcomando para enumerar, agregar, eliminar claves privadas en el llavero de ssh-agent. Luego sessh-addcomunica con elssh-agentservicio para cumplir con las tareas.keychaines un script para encontrar elssh-agentservicio (si no existe, inicie uno nuevo) y llamessh-addpara agregar claves privadas SSH.keychaintiene una idea simple y directa, 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 agente de token para 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, enKeychain Access.appel llavero. Luego, la próxima vez que vaya a utilizar claves privadas para la autenticación,Keychain Access.appvolverá a aparecer una ventana y le preguntará si otorga el privilegio. Después de obtener un gran sí,keychain Access.appagrega su clave privada alssh-agentalmacenamiento.Dos cosas merecen su atención:
ssh-agentservicio al inicio, escuchando en un zócalo debajo/tmp.Keychain Access.appalmacena su frase de contraseña SSH, para que pueda agregar su clave privadassh-agentsin interrumpirlo. Sí, no es necesario que escriba su frase SSH, pero 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, SSH-login-without-ask-passphrase debería funcionar en Mac OS X fuera de la caja.
fuente
En caso de que otras soluciones aquí no funcionen para las personas, las siguientes funcionaron 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 el mismo nombre que la clave privada pero que esté
.pubal final. Si ya tenía una clave pública adecuada, intente regenerarla.Si necesita volver a crear las claves públicas, puede hacerlo fácilmente:
Reemplazar
my_keycon como se llame su clave.Después de eso, MacOS recuerda la frase clave en el llavero como debería.
Nota: ingresar la frase de contraseña y guardarla en el llavero ahora es una acción única (no una vez por sesión de inicio de sesión como lo desea OP), pero suponiendo que el inicio de sesión en el Mac en cuestión esté protegido con contraseña, su contraseña está protegida por esa contraseña de inicio de sesión. Además, esta solución no tiene sentido para mí ... una clave pública no debería ser requerida además de la clave privada, pero por alguna razón MacOSX lo requiere.
(originalmente de la respuesta a una pregunta similar en Apple Stack Exchange)
fuente
Lo único que rara vez encuentro mencionado con respecto a la configuración de la
~/.sshcarpeta es restringir los permisos del directorio.Para habilitar ssh para evitar pedir la contraseña, siempre tuve que configurar los permisos del directorio de inicio del usuario
700y también los~/.sshpermisos de la carpeta700.De lo contrario, sigue pidiéndome una contraseña incluso cuando tengo todas las claves generadas y copiadas correctamente. Se genera un mensaje de error en los registros de autenticación, pero esto es invisible para el usuario final en su mayor parte.
fuente
Otra cosa que podrías haber intentado hubiera sido reemplazarlo
ssh-copy-idcon algo asík="$(cat ~/.ssh/id_rsa.pub)"; ssh [email protected] "umask 0077; mkdir -p ~/.ssh; echo "$k" >> ~/.ssh/authorized_keys2".fuente
Esta respuesta no es la solución a esta pregunta; sin embargo, está muy cerca (terminé con esta pregunta mientras buscaba una solución a mi problema).
También hago mucho SSH en servidores remotos en mi Mac, como se describe en esta pregunta, sin embargo, la
Keychain Access.appaplicación almacenó la frase clave y no necesito escribirla cada vez que necesito la clave para autenticarme en un servidor SSH.Sin embargo, habilité el servidor SSH en mi Mac, para poder conectarme a él de forma remota. Cuando inicié sesión de forma remota en mi Mac, la frase clave siempre se preguntaba cuando quería SSH otro host más.
Encontré una solución que permite almacenar la frase clave para la sesión actual. Pensé que esto podría ser útil para alguien, de ahí esta publicación / respuesta.
fuente
He estado desconcertando sobre este problema. ssh funciona en todas las máquinas de nuestro departamento, EXCEPTO para las manzanas (no importa MacBooks o iMacs). Finalmente me cansé de escribir las contraseñas y decidí depurar esto.
Fui a mi iMac y deshabilité sshd en el panel de preferencias de uso compartido. Luego sujete a root, y escribí "/ usr / sbin / sshd -d" para activar sshd en modo de depuración. Luego intenté enviar ssh a esa máquina e inmediatamente traté de usar el protocolo 2, que todo parece usar muy bien, pero sshd rápidamente informó que no pudo encontrar "claves_autorizadas". Tenía un archivo autorizado_keys2 que todas mis cajas de Linux, Solaris y You-name-it aceptan muy bien. Simplemente copié autorizado_keys2 a Authorizedkeys y BOOM. Funciona perfectamente ahora.
Por qué * keys en lugar de * keys2 es desconocido. Particularmente cuando os x está bastante contento con known_hosts2.
En cualquier caso, ahora todas nuestras cajas de Apple se pueden iniciar sesión o ejecutar comandos remotos sin esa contraseña: aviso ...
fuente