Pregunta ¿Cómo configuro SSH para no tener que escribir mi contraseña?


¿Cómo configuro SSH para no tener que escribir mi contraseña cuando me conecto a un host?


136


origen


Uno podría argumentar si el uso de tales claves no requiere una contraseña. Para evitar que cualquiera que consiga su clave privada realmente pueda abusar de ella, uno puede proteger la clave con una contraseña de sí mismo. Por supuesto, uno puede dejar esa contraseña en blanco, pero hay muchos casos en que eso no sería recomendable. - Arjan
En el último Cygwin con el SSH más reciente, me estaban volviendo a solicitar porque necesitaba hacer un cambio en mi ~/.ssh/config eso ahora es requerido PubkeyAcceptedKeyTypes ssh-rsa*,ssh-dss* - HDave


Respuestas:


Genera una clave SSH (si no tienes una)

Si usa GNOME, el caballo de mar aplicación ("Contraseñas y claves de cifrado") puede hacerlo por usted: Archivo -> Nuevo -> Secure Shell Key.

Si prefieres terminal, ejecuta ssh-keygen -t <tipo> para generar un par de llaves Los tipos de pares de llaves válidos son:

  • rsa: el valor predeterminado
  • dsa: más o menos equivalente, excepto que está restringido a claves de 1024 bits
  • ecdsa: misma seguridad con claves más pequeñas, pero relativamente nuevo y algo raro en el software SSH.
  • ed25519: Alta seguridad (más resistente a ataques de canal lateral y generadores débiles de números aleatorios). Generación de firmas muy rápida. Muy nuevo. Solo disponible en OpenSSH> = 6.5.

El programa te pedirá un frase de contraseña y un lugar donde guardar la nueva clave. Se recomienda utilizar la ruta predeterminada sugerida porque todas las demás herramientas la buscarán allí.

Cargue la clave pública en el servidor remoto

De nuevo, caballo de mar a menudo puede hacer eso por usted, en Mis llaves personales, haga clic derecho en su clave SSH y elija Configurar clave para shell seguro.

O, ssh-copy-id -i ~/.ssh/id_rsa.pub remote-user@remote-host en la terminal

O, completamente de forma manual paso a paso:

  1. Crear un directorio (si no existe ya) llamado .ssh en el directorio de inicio del usuario remoto en el host remoto.
  2. En ese directorio, crea un archivo llamado authorized_keys (si no existe ya)
  3. En caso de que su control remoto umask es más liberal que de costumbre, haga que el archivo no se pueda escribir en grupo: chmod go-w ~/.ssh ~/.ssh/authorized_keys.
  4. Finalmente, de alguna manera copie (adjunte) los contenidos de su local Llave pública (~/.ssh/id_rsa.pub) en el control remoto ~/.ssh/authorized_keys archivo.

Cargue la clave en el agente ssh

Si carga su clave privada en un ssh agente, mantendrá la clave descifrada en la memoria. Queremos que esto evite volver a ingresar la contraseña cada vez que ingresemos en un servidor.

Primero, el agente debe iniciarse o la ruta de un socket de comunicación lanzado debe cargarse en una variable. Corriendo ssh-agent en un terminal generará comandos para asignar y establecer las variables del agente. Estos comandos se pueden guardar en un archivo para usar en un terminal diferente. Alternativamente, uno podría ejecutar estos comandos y olvidarse de volver a usar el mismo agente en otro terminal. p.ej: eval $(ssh-agent).

Cargar la clave es una simple cuestión de ejecución ssh-add y dándole la frase de paso.

Si está usando GNOME, gnome-keyring-daemon generalmente proporciona la misma funcionalidad de agente SSH que ssh-agent, por lo que no debería necesitar iniciar nada. GNOME también cargará y desbloqueará automáticamente la clave al iniciar sesión.

Shell en el servidor remoto sin una contraseña

Si todo fue hecho correctamente, usando ssh usuario @ servidorno le pedirá una contraseña. Si algo está mal con el agente y no con la clave, se le pedirá que escriba la contraseña para la clave y no la contraseña para la cuenta del usuario.

Todo lo que use ssh para la comunicación funcionará sin ingresar la contraseña de la cuenta de usuario cuando se cargue la clave correcta en el agente. Programas como scp, sftp y rsync hacer uso de esto


Notas:

  • Solo necesita una clave SSHv2, ya que SSHv1 es muy inseguro y no se utiliza.
  • También solo necesita un tipo de clave: RSA o DSA son suficientes. (ed25519 y ECDSA son recientes y, por lo tanto, no se admiten en todas partes).
  • Todos estos pasos son los mismos para las claves RSA y DSA. Si usa DSA, use id_dsa en lugar de id_rsa, y ECDSA tendrá id_ecdsa.
  • Servidores OpenSSH anteriores a 3.0 utilizados authorized_keys2 - pero es poco probable que encuentre algo más antiguo que 5.0 en uso.
  • Estas instrucciones solo se aplican a OpenSSH versión 3.0 y posterior. lsh, ssh.comy otros servidores SSH (Unix y no) no están incluidos en este tutorial.

Ejemplos:

  • Copiando la clave pública a un host remoto:

    ssh-copy-id -i ~ / .ssh / id_rsa.pub myaccount @ remotehost # this
    
    cat ~ / .ssh / id_rsa.pub | ssh myaccount @ remotehost \
          'mkdir -p ~ / .ssh; cat >> ~ / .ssh / authorized_keys '# o esto
    
  • Variables de agente de ahorro para su reutilización (ejemplo elaborado)
    ssh-agent> ~ / .ssh / cross-terminal-agent
    . ~ / .ssh / cross-terminal-agent
    

152



ah, tienes que decir "ssh-add {path-to-private-key-file}" y luego te preguntará por tu frase de contraseña. Por favor haz esto más explícito en tu publicación. También debería agregar "Cuarto, ejecutar ssh". Parte del problema con la documentación con esto es que pasa por alto los pasos aparentemente obvios que NO son obvios para alguien nuevo en el proceso que no tiene idea de lo que está pasando y cómo estos programas funcionan juntos. - Jason S
Jason: ssh-add -l es para verificar si un agente se está ejecutando. ssh-add sin argumentos agregará la clave desde la ubicación predeterminada (que es ~ / .ssh / id_rsa). De todos modos, actualizado. - grawity
hay un comando ssh-copy-id que copia la clave pública al host de destino y establece permisos automáticamente. - hasen
¡Gran respuesta! Falta un poco acerca de los permisos de archivo de los archivos clave. Solo tuve un problema relacionado con eso hoy. El archivo de clave privada solo debe ser accesible para mí, y el archivo de clave pública solo debe ser escrito por mí. - ripper234
Un trazador de líneas: ssh-keygen -f ~/.ssh/id_rsa -N "";ssh-copy-id -i ~/.ssh/id_rsa username@server-ip-or-address (simplemente reemplace username@server-ip-or-address) - totymedli


No especificaste en qué Unix estás, a qué Unix te estás conectando, qué shell estás usando, qué variante de SSH estás usando, etc. Por lo tanto, algo de esto podría necesitar ser ajustado ligeramente; esto se basa en versiones razonablemente recientes de OpenSSH, que se usa en muchas variantes de Unix.

Esto es todo desde su sistema de escritorio local.

ssh-keygen

Asegúrese de usar el valor predeterminado para el nombre clave. te sugiero que hacer establecer una frase de contraseña en esa clave, de lo contrario, es un problema de seguridad. "-t rsa" no sería una mala idea, pero probablemente no sea necesaria.

ssh-copy-id username@server

Eso le pedirá la contraseña que usaría para iniciar sesión, y configurará las cosas de authorized_keys para usted. (no es necesario hacerlo a mano)

Luego esto:

`ssh-agent`

o tal vez esto:

exec ssh-agent sh

o:

exec ssh-agent bash

Eso iniciará un agente de SSH que puede mantener su clave. En muchas variantes modernas de Unix, si estás conectado gráficamente, esto ya habrá tenido lugar. La primera variante (con los backticks) pone un ssh-agent en el fondo y configura las variables de entorno para hablar con él. Los dos segundos hacen que el agente ejecute un intérprete de comandos para usted, de modo que cuando salga del intérprete de órdenes, el agente salga.

Muchas variantes modernas de Unix ya tendrán un agente ejecutándose para usted, especialmente si inició sesión gráficamente. Puede intentarlo "ps aux | grep ssh-agent"o"ps -ef | grep ssh-agent"; si algo ya está en ejecución, úsalo.

Entonces finalmente:

ssh-add

Pedirá una frase de contraseña; dale el que le diste a ssh-keygen. También hay formas de hacerlo preguntar gráficamente. Y puede poner ssh-agent y ssh-add en sus scripts de inicio de sesión (la configuración es diferente dependiendo del shell que use) para automatizar esto, pero algunas variantes de Unix (Linux actual de Ubuntu, por ejemplo) hacen la mayor parte automáticamente, por lo que que todo lo que necesita hacer es crear una clave y usar ssh-copy-id para configurarla en el host remoto.

Ahora, "ssh username@server"debería funcionar sin pedir ninguna autenticación. Detrás de escena, está usando una clave que sostiene el ssh-agent, y le pide al agente que haga los trucos de magia para firmarla".


18





Es posible hacer esto en Masilla en Windows también.

Una vez que tenga el par de claves pública / privada configuradas (como se muestran otras respuestas aquí) ejecute PuttyGen. Allí, cargue la clave privada existente que ya ha configurado y luego guárdela como una clave privada PuTTY (ppk).

Luego, en PuTTY, simplemente haga clic en la sesión guardada a la que desea iniciar sesión automáticamente y haga clic en Cargar. Desde aquí, vaya a Conexión -> Datos en el panel izquierdo, y en "Usuario de inicio de sesión automático" escriba el nombre de usuario para ese servidor remoto:

PuTTY username entry

Después de eso, vaya a Connection -> SSH -> Auth, y busque el ppk que creó en PuttyGen:

PuTTY private key entry

Luego regrese a la página de la sesión y guarde la sesión que cargó anteriormente.


11



El primer enlace de imagen, "Entrada de nombre de usuario de PuTTY", parece estar roto. - Peter Mortensen
PuTTY incluye su propia versión de ssh-agent; se llama Desfile. Se ejecuta en la bandeja del sistema y contiene la clave para usted. No necesita ejecutar ssh-agent, solo marque "Permitir reenvío de agente" en las opciones de PuTTY en la sección de autenticación, y la conexión del concurso se reenviará al extremo remoto para que su agente clave esté disponible para él. - Kevin Panko


De una pregunta muy similar en ServerFault, Recomendaría usar ssh-copy-id, que hace todos los pasos necesarios para configurar las claves de autenticación para usted:

ssh-copy-id es un script que usa ssh   para iniciar sesión en una máquina remota   (presumiblemente utilizando una contraseña de inicio de sesión, por lo   autenticación de contraseña debe ser   habilitado, a menos que hayas hecho   uso inteligente de múltiples identidades)

También cambia los permisos de la   hogar del usuario remoto, ~ / .ssh, y   ~ / .ssh / authorized_keys para eliminar grupo   escriturabilidad (que de otro modo   evitar que inicie sesión, si el   sshd remoto tiene StrictModes establecido en su   configuración).

Si se da la opción -i, entonces la   archivo de identidad (predeterminado a   ~ / .ssh / identity.pub) se usa,   independientemente de si hay alguna   claves en su ssh-agent.

Todo lo que necesitas hacer es simplemente esto:

ssh-copy-id user@host

Escriba su contraseña una vez, ¡y listo!


3





Además de todo lo que ya me han dicho sobre cómo configurar las claves ssh, recomiendo Llavero como un ssh-agent frontend de consola que le permite manejar uno solo por proceso de sistema en lugar de por inicio de sesión.

Sé que ya hay herramientas de GNOME y KDE que hacen lo mismo, pero si eres el adicto a la consola escriba esto es genial (y se puede usar en la mayoría de los sistemas Unix).

Para usarlo, simplemente agregue lo siguiente a su ~/.bashrc (similar para otras conchas):

if type keychain >/dev/null 2>/dev/null; then
  keychain --nogui -q <all your SSH/PGP keys>
  [ -f ~/.keychain/${HOSTNAME}-sh ] && . ~/.keychain/${HOSTNAME}-sh
  [ -f ~/.keychain/${HOSTNAME}-sh-gpg ] && . ~/.keychain/${HOSTNAME}-sh-gpg
fi

3





http://linuxproblem.org/art_9.html

Tu objetivo

Desea usar Linux y OpenSSH para automatizar sus tareas. Por lo tanto, necesita un inicio de sesión automático del host A / usuario a al Host B / usuario b. No desea ingresar contraseñas, porque desea llamar a ssh desde dentro de un script de shell.


2



La votación negativa no era mía, pero no me importaría que la gente borre su respuesta si notan que alguien más publicó una respuesta casi similar momentos antes. - Arjan
Arjan: En general, estoy de acuerdo contigo, pero cuando las publicaciones están separadas por varios segundos, no necesariamente creo que sea justo castigar a la persona en segundo lugar. No digo que tengas que recompensarlos con la votación ascendente, pero el voto negativo da la impresión de que la respuesta es incorrecta, en lugar de no a tiempo. - TheTXI


Escribí este muy breve tutorial después de REALMENTE REALMENTE frustrado con REALMENTE REALMENTE largos tutoriales porque realmente es muy simple :)

test -f ~/.ssh/id_rsa.pub || ssh-keygen -t rsa #press enter twice if given prompts, then "ssh-add"

scp ~/.ssh/id_rsa.pub destID@destMachine:/tmp/ #type password

ssh destID@destMachine #type password

cat /tmp/id_rsa.pub >> ~/.ssh/authorized_keys

rm /tmp/id_rsa.pub

2