¿Cómo puedo configurar el inicio de sesión SSH sin contraseña?

229

Quiero poder iniciar sesión en un control remoto a través de ssh sin tener que ingresar la contraseña todo el tiempo.

  • ¿Cómo lo configuro?
  • ¿Se requiere un comando diferente para ejecutar una sesión sin contraseña?
pregunta Oxwivi 04.06.2011 - 17:24

10 respuestas

237

Respuesta

Ejecuta estos comandos:

ssh-keygen

Luego deberá copiar la nueva clave para su servidor :

ssh-copy-id user@host
## or if your server uses custom port no:
ssh-copy-id "user@host -p 1234"

Después de copiar la clave, ssh en la máquina como de costumbre:

ssh user@host

Ahora puede iniciar sesión sin ingresar una contraseña de la máquina en particular en la que ejecutó los comandos.

Ejemplo

not-marco@rinzwind-desktop:~$ ssh-keygen 
Generating public/private rsa key pair.
Enter file in which to save the key (/home/not-marco/.ssh/id_rsa): 
Created directory '/home/not-marco/.ssh'.
Enter passphrase (empty for no passphrase): 
Enter same passphrase again: 
Your identification has been saved in /home/not-marco/.ssh/id_rsa.
Your public key has been saved in /home/not-marco/.ssh/id_rsa.pub.
The key fingerprint is:
b1:25:04:21:1a:38:73:38:3c:e9:e4:5b:81:e9:ac:0f not-marco@rinzwind-desktop
The key's randomart image is:
+--[ RSA 2048]----+
|.o= . oo.        |
|*B.+ . .         |
|*=o .   o .      |
| = .     =       |
|. o     S        |
|E.               |
| o               |
|  .              |
|                 |
+-----------------+

not-marco@rinzwind-desktop:~$ ssh-copy-id not-marco@server
not-marco@server's password: 
Now try logging into the machine, with "ssh 'not-marco@server'", and check in:

  ~/.ssh/authorized_keys

to make sure we haven't added extra keys that you weren't expecting.

Explicación

Esto supone que ya se puede conectar con éxito a su servidor a través de SSH.

Necesitará generar un par de llaves SSH que le permitirá identificarse como usted mismo sin usar una contraseña. Si lo desea, puede optar por proteger las claves con un código de acceso, pero puede dejarlo en blanco para permitir el acceso SSH totalmente sin contraseña.

  1. Primero cree su par de claves SSH ejecutando ssh-keygen , esto creará un archivo id_rsa y id_rsa.pub . El archivo pub es lo que pasa en los servidores, la clave privada ( id_rsa ) es lo que permanece con usted y es cómo se identifica.
  2. A continuación, copie la clave pública en su servidor con ssh-copy-id user@server reemplazando al usuario con su usuario remoto y el servidor con el nombre DNS o la dirección IP de la máquina. Le pedirá su contraseña SSH, ingrésela y si todo se completa correctamente, podrá acceder a la máquina a través de ssh user@server sin necesidad de una contraseña.

Referencias

  • enlace
respondido por el Rinzwind 04.06.2011 - 17:36
32

Escriba los siguientes comandos:

  1. ssh-keygen

    Presione la tecla Ingresar hasta que aparezca el aviso

  2. ssh-copy-id -i root@ip_address

    (Una vez le pedirá la contraseña del sistema host)

  3. ssh root@ip_address

Ahora debería poder iniciar sesión sin ninguna contraseña.

    
respondido por el Ravindra 17.05.2013 - 08:45
21

La forma en que normalmente hago esto es la siguiente:

ssh-keygen -t rsa

(Cuando se le solicite una contraseña, déjela en blanco)

Entonces: cat ~/.ssh/id_rsa.pub | ssh username@hostname 'cat >> .ssh/authorized_keys'

(Esto requiere que la carpeta .ssh esté en el directorio de inicio en el nombre de host seleccionado, con el archivo authorized_keys en él)

Por supuesto, reemplace el nombre de usuario con el nombre de usuario deseado, y el nombre de host con el nombre de host o la dirección IP deseada

Después de eso, simplemente SSH a esa casilla, como estás acostumbrado.

    
respondido por el kyentei 04.06.2011 - 18:22
18

Normalmente uso sshpass para eso, lo instalo con sudo apt-get install sshpass y lo uso así

sshpass -p 'password' ssh your_username@your_server
    
respondido por el Bruno Pereira 06.12.2011 - 17:26
9

Esta solución es específicamente para usuarios que usan Windows para ssh en sus máquinas remotas, incluidas las imágenes de la nube en AWS Cloud y GCE Cloud

Descargo de responsabilidad

Recientemente usé esta solución para iniciar sesión de forma remota nuevas imágenes de VM implementadas en GCE.

Herramientas utilizadas:

  1. puttygen descarga de puttygen
  2. winscp descarga de winscp

Pasos a realizar:

  1. Genere un par de claves públicas / privadas usando puttygen.
  2. Cargue la clave pública a su servidor en la nube o ubicación remota.

Cómo hacerlo:

1. Genere una clave / par o use una clave privada existente

Si posee una clave privada:

Abra puttygen , presione el botón de carga y seleccione su archivo de clave privada ( *.pem ).

Si no posee una clave privada:

  • Abrir puttygen ,
  • Seleccione el tipo de clave deseado SSH2 DSA (puede usar RSA o DSA) dentro de la sección Parámetros . Es importante que deje en blanco el campo de la frase de contraseña.
  • Presione generar y siga las instrucciones para generar un par de claves (público / privado).

(delafuente1,enlacequefiguraacontinuación)

2.Creeunnuevoarchivo'authorized_keys'(connotepad)

Copiesusdatosdeclavepúblicadelasección"Clave pública para pegar en OpenSSH authorized_keys file" del generador de claves PuTTY, y pegue los datos de claves en el archivo authorized_keys .

Asegúrese de que solo haya una línea de texto en este archivo.

3. Subir clave al servidor Linux

  • Abre WinSCP,
  • Seleccione el protocolo de archivo SFTP e inicie sesión con sus credenciales ssh.
  • Si tiene éxito, verá la estructura del directorio principal en su máquina remota.

Cargue el archivo authorized_keys al directorio principal en la máquina remota.

4. Establecer los permisos adecuados

Hacer directorio .ssh (si no existe)

Copie el archivo authorized_keys en el directorio .ssh .
(Esto reemplazará cualquier archivo authorized_keys existente, tome nota de esto).

Si el archivo existió, simplemente agregue el contenido de este archivo al archivo existente.

Ejecutar comandos para establecer permisos:

sudo chmod 700 .ssh && chmod 600 .ssh/authorized_keys

Ahora podrá ssh en la máquina remota sin ingresar credenciales cada vez.

Lectura adicional:

respondido por el devprashant 20.11.2015 - 09:07
7
  

Deshabilitar la autenticación de contraseña

     

Debido a que muchas personas con servidores SSH usan contraseñas débiles, muchos   los atacantes en línea buscarán un servidor SSH y luego comenzarán a adivinar   contraseñas al azar. Un atacante puede probar miles de contraseñas en un   hora, y adivinar incluso la contraseña más fuerte dado suficiente tiempo. los   La solución recomendada es usar claves SSH en lugar de contraseñas. Ser como   difícil de adivinar como una clave SSH normal, una contraseña debería contener   634 letras y números al azar. Si siempre podrás iniciar sesión en   su computadora con una clave SSH, debe desactivar la contraseña   autenticación en conjunto.

     

Si deshabilita la autenticación de contraseña, solo será posible   Conéctese desde computadoras que haya aprobado específicamente. Esto masivamente   mejora tu seguridad, pero te hace imposible conectarte   su propia computadora desde la PC de un amigo sin aprobar previamente la PC, o   desde su propia computadora portátil cuando borra accidentalmente su clave.

     

Se recomienda desactivar la autenticación de contraseña a menos que tenga un   razón específica para no hacerlo.

     

Para deshabilitar la autenticación de contraseña, busque la siguiente línea en   su archivo sshd_config:

#PasswordAuthentication yes
     

sustitúyelo por una línea que tenga este aspecto:

PasswordAuthentication no
     

Una vez que haya guardado el archivo y reiniciado su servidor SSH,   ni siquiera se le debe pedir una contraseña cuando inicia sesión.

enlace

    
respondido por el Thufir 15.02.2015 - 01:10
4

Si crea un par de llaves públicas / privadas e inicia sesión con nuestra clave pública recién creada, no tendrá que escribir su contraseña. Dependiendo de la configuración de su llavero y / o agente ssh, es posible que necesite proteger su clave con una frase de contraseña.

Este es uno de los muchos instrucciones breves para usted. ¡Es de crucial importancia para la seguridad de este método, que la clave privada generada permanezca privada! Nunca debe compartirlo con nadie o permitir el acceso a él en cualquier capacidad.

Este comando genera una clave bastante fuerte en ~/.ssh/ :

ssh-keygen -b 4096

En ~/.ssh/ encontrará su clave pública como id_rsa.pub . Su contenido debe adjuntarse al archivo authorized_keys de sus servidores mediante el transporte a través de un medio transportable (pen drive) o habilitando en breve la autenticación de contraseña en el servidor, luego utilizando ssh-copy-id ~/.ssh/id_rsa.pub username@server y luego desactivándola nuevamente.

Si eligió asegurar su clave con una frase de contraseña (en el primer paso), puede usar ssh-agent o el llavero de Ubuntu para asegurar ese pharse localmente, de modo que no tenga que escribirla todo el tiempo.

    
respondido por el con-f-use 04.06.2011 - 17:32
3

Inicio de sesión / copia remota sin proporcionar una contraseña

Las aplicaciones ssh y scp para el inicio de sesión remoto y la copia remota, respectivamente, le permiten comunicarse con un host remoto sin proporcionar una contraseña. Esto requiere que siga un procedimiento de autenticación como el que se describe a continuación. Por cliente nos referimos a la máquina en la que está sentado y por servidor nos referimos a la máquina en la que desea iniciar sesión sin dar una contraseña. Los pasos del procedimiento de autenticación son:

  1. Ejecute ssh-keygen para generar claves privadas y públicas, a menos que esto ya esté hecho en su máquina. Estos se almacenan en archivos en $HOME/.ssh .
  2. Agregue el contenido del archivo de clave pública al archivo $HOME/.ssh/authorized_keys o $HOME/.ssh/authorized_keys2 en el servidor.

Hay tres tipos diferentes de protocolos de autenticación. Usted especifica el tipo cuando ejecuta ssh-keygen:

  1. SSH protocolo versión 1, RSA1: esta es la opción predeterminada y da como resultado la identidad de los archivos (clave privada, debe tomar chmod 0700 para asegurarse de que este archivo no sea legible para otros ) y identity.pub (clave pública).
  2. SSH protocolo versión 1, RSA : esto se obtiene ejecutando ssh-keygen -t rsa y genera los archivos id_rsa (clave privada) y id_rsa.pub (clave pública)
  3. SSH protocolo versión 1, DSA : esto se obtiene ejecutando ssh-keygen -t dsa y genera los archivos id_dsa (clave privada) y id_dsa.pub (clave pública)

Al ejecutar ssh-keygen, puede confiar en las respuestas predeterminadas (lo que implica que no proporciona una frase de contraseña). Esto hace que toda la configuración sea simple, pero también insegura.

Puede especificar el tipo de claves que usará una opción para ssh ; ssh -1 fuerza el uso de las teclas RSA1 (protocolo versión 1), mientras que ssh -2 fuerza a ssh a probar RSA Solo las teclas o DSA (protocolo versión 2). En los ejemplos a continuación, generamos e instalamos las teclas RSA1 y DSA en el host remoto para que tenga más flexibilidad. Puede hacer un archivo de configuración en su directorio .ssh con la línea

Protocol 1,2

Esto hace que ssh intente una conexión RSA1 (versión 1 del protocolo) antes de RSA / DSA (protocolo versión 2).

Utilizando claves RSA1

remote=user@remotehost   # fill in correct user and remotehost names
cd $HOME/.ssh
# create .ssh on remote host if it is non-existing:
ssh $remote 'if [ ! -d .ssh ]; then mkdir .ssh; fi' 
# copy RSA1 key: 
scp identity.pub ${remote}:.ssh
ssh $remote "cd .ssh; cat identity.pub >> authorized_keys"

Usando claves DSA

remote=user@remotehost   # fill in correct user and remotehost names
cd $HOME/.ssh
# create .ssh on remote host if it is non-existing:
ssh $remote 'if [ ! -d .ssh ]; then mkdir .ssh; fi' 
# copy DSA key: 
scp id_dsa.pub ${remote}:.ssh
ssh $remote "cd .ssh; cat id_dsa.pub >> authorized_keys2"

Esto es todo lo que tiene que hacer si no usó una frase de contraseña al generar las claves. Puede probar la conexión ejecutando ssh $ remote y ver si puede iniciar sesión sin dar una contraseña (es posible que necesite usar -1 o -2 como opciones para ssh ). El procedimiento puede, por supuesto, repetirse para cualquier máquina en la que desee iniciar sesión.

Si usó una frase de contraseña, tendrá que ejecutar el programa ssh-agent para iniciar un shell especial, seguido de ssh-add para registrar su clave / frase de contraseña Combinación con sshd . Consulte las páginas de manual de estos programas para obtener más información.

Un script para automatizar conexiones sin contraseña: ssh-no-password.sh

#!/bin/sh

# create ssh connections without giving a password

if [ $# -lt 1 ]; then
  echo Usage: $0 username@remotehost
  exit
fi
remote="$1"  # 1st command-line argument is the user@remotehost address
this=$HOST   # name of client host

# first check if we need to run ssh-keygen for generating
# $HOME/.ssh with public and private keys:
if [ ! -d $HOME/.ssh ]; then
  echo "just type RETURN for each question:" # no passphrase - unsecure!!
  # generate RSA1, RSA and DSA keys:
  echo; echo; echo
  ssh-keygen
  echo; echo; echo
  ssh-keygen -t rsa
  echo; echo; echo
  ssh-keygen -t dsa
else
  # we have $HOME/.ssh, but check that we have all types of
  # keys (RSA1, RSA, DSA):
  if [ ! -f $HOME/.ssh/identity ]; then
     # generate RSA1 keys:
     echo "just type RETURN for each question:" # no passphrase - unsecure!!
     ssh-keygen
  fi
  if [ ! -f $HOME/.ssh/id_rsa ]; then
     # generate RSA keys:
     echo "just type RETURN for each question:" # no passphrase - unsecure!!
     ssh-keygen -t rsa
  fi
  if [ ! -f $HOME/.ssh/id_rsa ]; then
     # generate DSA keys:
     echo "just type RETURN for each question:" # no passphrase - unsecure!!
     ssh-keygen -t dsa
  fi
fi


cd $HOME/.ssh

if [ ! -f config ]; then
  # make ssh try ssh -1 (RSA1 keys) first and then ssh -2 (DSA keys)
  echo "Protocol 1,2" > config
fi

# copy public keys (all three types) to the destination host:

echo; echo; echo
# create .ssh on remote host if it's not there:
ssh $remote 'if [ ! -d .ssh ]; then mkdir .ssh; fi' 
# copy RSA1 key: 
scp identity.pub ${remote}:.ssh/${this}_rsa1.pub
# copy RSA key:
#scp id_rsa.pub ${remote}:.ssh/${this}_rsa.pub
# copy DSA key:
scp id_dsa.pub ${remote}:.ssh/${this}_dsa.pub
# make authorized_keys(2) files on remote host:

echo; echo; echo
# this one copies all three keys:
#ssh $remote "cd .ssh; touch authorized_keys authorized_keys2; cat ${this}_rsa1.pub >> authorized_keys; cat ${this}_rsa.pub >> authorized_keys2; cat ${this}_dsa.pub >> authorized_keys2;"
# this one copies RSA1 and DSA keys:
ssh $remote "cd .ssh; touch authorized_keys authorized_keys2; cat ${this}_rsa1.pub >> authorized_keys; cat ${this}_dsa.pub >> authorized_keys2;"

echo; echo; echo
echo "try an ssh $remote"

copiado de: enlace

    
respondido por el αғsнιη 14.09.2014 - 08:27
2

Para hacer algunas adiciones:

  • Mac por defecto no tiene ssh-copy-id , tendrás que instalarlo tú mismo:

    curl https://raw.github.com/beautifulcode/ssh-copy-id-for-OSX/master/ssh-copy-id.sh -o /usr/local/bin/ssh-copy-id
    chmod +x /usr/local/bin/ssh-copy-id
    

encuentra más aquí: enlace

  • si ha realizado un reenvío de puertos, el comando debería ser así:

    ssh-copy-id "not-marco@127.0.0.1 -p 2222"
    

tenga en cuenta que las citas son necesarias.

    
respondido por el samluthebrave 14.09.2013 - 12:14
1

Me gustaría agregar una respuesta para aquellos que pueden encontrar que deben ingresar la contraseña, incluso si han leído todas las respuestas aquí porque usted ha establecido IdentitiesOnly como sí. Y la respuesta aquí puede ahorrarle mucho tiempo para administrar varias claves, como claves para git o servidor.

Una vez que haya generado la clave y la haya copiado al servidor:

ssh-keygen  # change the file to /home/yourname/.ssh/something
ssh-copy-id -i ~/.ssh/something.pub lerner@192.168.20.160

Encontré que no funcionó.

Luego fui a verificar el archivo ~/.ssh/config en el cliente, lo vi en la parte inferior:

Host *
IdentitiesOnly yes

Luego agrego esto arriba:

Host somename
HostName 192.168.20.160
User lerner
IdentityFile ~/.ssh/something

Simplemente puedo iniciar sesión ingresando ssh somename .

Luego puedes agregar varias teclas ssh usando tus nombres favoritos, y solo necesitas agregar las configuraciones como las cuatro líneas anteriores al archivo de configuración.

Host es el nombre que le gustaría ingresar cuando conecte el servidor más tarde; el HostName es la ip del servidor; Usuario es el nombre de usuario que inicia sesión en el servidor; y el archivo de identidad es el archivo donde almacena la clave que ha generado.

    
respondido por el lerner 24.01.2018 - 09:08

Lea otras preguntas en las etiquetas