it-swarm.dev

¿Cómo configurar 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?

147
Richard Hoskins

Genera una clave SSH (si no tienes una)

Si usa GNOME, la aplicación seahorse ("Contraseñas y claves de cifrado") puede hacerlo por usted: Archivo -> Nuevo -> Clave de shell seguro .

Si prefiere el terminal, ejecute ssh-keygen -t <type> para generar un par de llaves. Los tipos de par de llaves válidos son:

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

El programa le pedirá una frase de contraseña y una ubicación donde guardar la nueva clave. Se recomienda usar la ruta predeterminada sugerida porque todas las demás herramientas la buscarán allí.

Sube la clave pública al servidor remoto

Una vez más, seahorse a menudo puede hacerlo por usted: en Mis claves personales , haga clic con el botón derecho en su clave SSH y elija Configurar clave para shell seguro .

O, ssh-copy-id -i ~/.ssh/id_rsa.pub [email protected] en la terminal.

O, completamente manualmente paso a paso:

  1. Cree un directorio (si no existe ya) llamado .ssh en el directorio de inicio del usuario remoto en el host remoto.
  2. En ese directorio, cree un archivo llamado authorized_keys (si aún no existe).
  3. En caso de que su umask remoto sea más liberal de lo normal, haga que el archivo no se pueda escribir en grupo: chmod go-w ~/.ssh ~/.ssh/authorized_keys.
  4. Finalmente, de alguna manera copie (agregue) el contenido de su clave pública local (~/.ssh/id_rsa.pub) en el archivo ~/.ssh/authorized_keys remoto.

Cargue la clave en el agente ssh

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

Primero, el agente debe iniciarse o la ruta de un socket de comunicación iniciado debe cargarse en una variable. Ejecutar ssh-agent en un terminal generará comandos para asignar y configurar las variables del agente. Estos comandos se pueden guardar en un archivo para su uso en un terminal diferente. Alternativamente, uno podría ejecutar estos comandos y olvidarse de reutilizar el mismo agente en otro terminal. por ejemplo: eval $(ssh-agent).

Cargar la clave es una simple cuestión de ejecutar ssh-add y darle la frase de contraseña.

Si está utilizando 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 contraseña

Si todo se hizo correctamente, usar ssh [email protected] no 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.

Cualquier cosa 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 hacen uso de esto.


Notas:

  • Solo necesita una clave SSHv2, ya que SSHv1 es muy inseguro y ahora no se usa.
  • También solo necesita un tipo de clave, ya sea RSA o DSA es suficiente. (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.
  • Los servidores OpenSSH anteriores a la versión 3.0 usaban authorized_keys2, pero es muy poco probable que encuentre algo anterior a la versión 5.0 en uso.
  • Estas instrucciones solo se aplican a la versión 3.0 de OpenSSH y posteriores. lsh, ssh.com, y 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 este 
    
  • Guardar las variables del agente para su reutilización (ejemplo detallado)
     ssh-agent> ~/.ssh/cross-terminal-agent 
    . ~/.ssh/cross-terminal-agent 
    
160
grawity

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, es posible que algo de esto deba ajustarse ligeramente; esto se basa en versiones razonablemente recientes de OpenSSH, que se utiliza 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 de clave. Le sugiero que haga establezca 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 necesario.

ssh-copy-id [email protected]

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

Luego esto:

`ssh-agent`

o tal vez esto:

exec ssh-agent sh

o:

exec ssh-agent bash

Se iniciará un agente SSH que puede mantener su clave. En muchas variantes modernas de Unix, si está conectado gráficamente, esto ya habrá ocurrido. La primera variante (con las comillas invertidas) pone un agente ssh en segundo plano y configura las variables de entorno para hablar con él. Los dos segundos hacen que el agente ejecute un Shell por usted, de modo que cuando salga del Shell, 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 probar "ps aux | grep ssh-agent" o "ps -ef | grep ssh-agent"; Si algo ya se está ejecutando, use eso.

Entonces finalmente:

ssh-add

Se le 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 las cosas ssh-agent y ssh-add en sus scripts de inicio de sesión (la configuración es diferente según el Shell que use) para automatizar esto, pero algunas variantes de Unix (Ubuntu Linux actual, por ejemplo) hacen la mayor parte de eso automáticamente, así que todo lo que necesita hacer es crear una clave y usar ssh-copy-id para configurarlo en el host remoto.

Ahora, "ssh [email protected]" debería funcionar sin pedir ninguna autenticación. Detrás de escena, está usando una tecla que el agente ssh está sosteniendo, y le pide al agente que haga los trucos de firma mágicos para ello.

22
freiheit

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

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

Luego, en PuTTY, simplemente haga clic en la sesión guardada en 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 "Nombre de usuario de inicio de sesión automático" escriba el nombre de usuario para ese servidor remoto:

PuTTY username entry

Después de eso, ingrese a Conexión -> SSH -> Aut. Y busque el ppk que hizo en PuttyGen:

PuTTY private key entry

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

De una pregunta muy similar en ServerFault , recomiendo usar ssh-copy-id , que realiza todos los pasos relacionados con la configuración de las claves de autenticación para usted:

ssh-copy-id es una secuencia de comandos que usa ssh para iniciar sesión en una máquina remota (probablemente usando una contraseña de inicio de sesión, por lo que la autenticación de contraseña debería estar habilitada, a menos que haya hecho un uso inteligente de varias identidades)

También cambia los permisos de inicio del usuario remoto, ~/.ssh, y ~/.ssh/authorized_keys para eliminar la capacidad de escritura del grupo (lo que de otro modo impediría que inicies sesión, si el sshd remoto tiene StrictModes establecido en su configuración).

Si se proporciona la opción -i, se usa el archivo de identidad (predeterminado en ~/.ssh/identity.pub), independientemente de si hay alguna clave en su agente ssh.

Todo lo que necesitas hacer es simplemente esto:

ssh-copy-id [email protected]

Escribe tu contraseña una vez, ¡y listo!

3
Chris Bunch

Aparte de todo lo que ya se ha dicho sobre cómo configurar las teclas ssh, recomiendo Llavero como un ssh-agent la interfaz de la consola, que le permite manejar uno solo por proceso del sistema en lugar de por inicio de sesión.

Sé que ya existen herramientas de GNOME y KDE que hacen lo mismo, pero si usted es del tipo de adicto a la consola , este es excelente (y puede usarse en la mayoría de los sistemas Unix).

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

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
scetoaux

PuTTY tiene una opción -pw que te permite crear un acceso directo en el escritorio como este:

"C:\Program Files\PuTTY\putty.exe" -ssh [email protected] -pw your_password
2
Genc Hosting

Escribí este tutorial muy breve después de frustrarme REALMENTE con tutoriales REALMENTE REALMENTE largos, porque en realidad 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 [email protected]:/tmp/ #type password

ssh [email protected] #type password

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

rm /tmp/id_rsa.pub
2
samthebest

http://linuxproblem.org/art_9.html

Su objetivo

Desea utilizar Linux y OpenSSH para automatizar sus tareas. Por lo tanto, necesita un inicio de sesión automático desde el Host A/usuario a al Host B/usuario b. No desea ingresar ninguna contraseña, ya que desea llamar a ssh desde un script de Shell.

2
TheTXI
  1. En el host de conexión, ejecute ssh-keygen. (Si le dice que tiene que especificar un tipo, haga ssh-keygen -t rsa). Cuando le solicite una ubicación de archivo, tome la opción predeterminada. Cuando te pide una frase de contraseña, pulsa Intro para no hacer una frase de contraseña.
  2. cat ~/.ssh/id_rsa.pub (o cualquiera que sea la ubicación predeterminada del archivo en ssh-keygen, aunque tendría que tener una realmente antigua ssh instalación para que sea diferente); Copia la salida a tu portapapeles.
  3. Inicie sesión normalmente en el host de destino como la cuenta a la que desea conectarse. Edite el archivo ~/.ssh/authorized_keys (si ~/.ssh no existe, slogin a algún lugar; esta es la forma simple y fácil de crearlo con los permisos adecuados). Pegue su portapapeles (que contiene el id_rsa.pub del otro Host) en este archivo.
1
chaos

Si quieres hacerlo todo en la terminal en Linux:

En el host

cd ~/.ssh /

ssh-keygen -t {rsa | dsa} -b {1024 | 2048 | 4096} -C "texto de comentario si desea" -f id_ArbitraryName

Los elementos en {} son opciones, use rsa o dsa y elija el tamaño de bit (más grande es más seguro)

Luego debe agregar los permisos a los archivos authorized_keys y authorized_keys2.

cat id_ArbitraryName.pub >> authorized_keys

cat id_AribtraryName.pub >> authorized_keys2

Luego descargue el archivo id_AribtraryName en el cuadro del que desea ssh. Si la caja de conexión está basada en Unix, puede ser necesario un archivo de configuración (en PuTTY, alguien que se menciona arriba).

En la caja de conexión

En su archivo de configuración - vim ~/.ssh/config

Host example.Host.com # o el nombre de su computadora

Nombre de usuario

Archivo de identidad ~/.ssh/id_ArbitraryName

El archivo de configuración necesita permisos de 600. La carpeta SSh necesita 700.

Espero que te ayude si te encuentras con el problema de configuración que se omite mucho.

0
nerdwaller