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 keychain
que 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.app
y 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-agent
es 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 remotosshd
durante la conexión inicial. (ssh-add
es 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-agent
nissh-add
manualmente. 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-agent
que nunca más se le solicite.Esto se maneja teniendo una
launchd
configuración que escuche las conexiones en el$SSH_AUTH_SOCK
zócalo y se inicie automáticamentessh-agent
cuando sea necesario; después de eso, lessh-agent
solicita credenciales solo cuando necesita abrir una nueva clave.Si eso no funciona, asegúrese de tener
launchd
presente 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
~/tmp
señalaba/tmp/
y ejecuté un trabajo cron para limpiar~/tmp
cada 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.app
trabajo. 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:
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 me puedo imaginar lo que estas herramientas hacen, es decir,
ssh-agent
,ssh-add
,keychain
,Keychain Access.app
en Mac.ssh-agent
es el servicio crítico para habilitar el uso de la clave privada SSH sin escribir la frase de contraseña SSH.ssh-agent
Funciona 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-agent
encontrará 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-agent
inicialmente se agrega tu clave privada .ssh-add
es parte de lassh-agent
colección, que ayuda a administrar sus claves SSHssh-agent
. Usamos elssh-add
comando para enumerar, agregar, eliminar claves privadas en el llavero de ssh-agent. Luego sessh-add
comunica con elssh-agent
servicio para cumplir con las tareas.keychain
es un script para encontrar elssh-agent
servicio (si no existe, inicie uno nuevo) y llamessh-add
para agregar claves privadas SSH.keychain
tiene una idea simple y directa, 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 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.app
el llavero. Luego, la próxima vez que vaya a utilizar claves privadas para la autenticación,Keychain Access.app
volverá a aparecer una ventana y le preguntará si otorga el privilegio. Después de obtener un gran sí,keychain Access.app
agrega su clave privada alssh-agent
almacenamiento.Dos cosas merecen su atención:
ssh-agent
servicio al inicio, escuchando en un zócalo debajo/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 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é
.pub
al 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_key
con 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
~/.ssh
carpeta 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
700
y también los~/.ssh
permisos 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-id
con 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.app
aplicació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