Iniciar sesión sin contraseña en ssh

Categories:

Si utilizas ssh para administrar un servidor puede resultar práctico el poder tener acceso al servidor sin que se nos pregunte por la contraseña en cada ocasión que nos conectamos.

Estos son los pasos que necesitas seguir para poder iniciar sesión en un servidor sin contraseña.

  1. Revisar la configuración del servidor SSH
  2. Crear clave de autenticación – en el cliente –
  3. Incluir la clave generada en el servidor

Revisar configuración del servidor SSH

Lo primero que hay que hacer es revisar en el servidor la configuración de ssh.
En el archivo sshd_config tenemos que buscar una línea que diga lo siguiente:

# sshd_config
PubkeyAuthentication yes

Si está comentada hay que habilitarla – quitarle los comentarios -.
Si el valor es no, es que no se permite el inicio de sesión utilizando claves públicas.

Crear la clave de autenticación en el cliente

$ ssh-keygen -t rsa

Al teclear esa instrucción vamos a generar un par de llaves públicas / privada contestando algunas preguntas.


Generating public/private rsa key pair.
Enter file in which to save the key (/Users/usuario/.ssh/id_rsa): archivo
Enter passphrase (empty for no passphrase):
Enter same passphrase again:
Your identification has been saved in archivo.
Your public key has been saved in archivo.pub.

The key fingerprint is:
ff:ff:ff:ff:ff:ff:ff:ff:ff:ff:ff:ff:ff:ff:ff:ff archivo
The key’s randomart image is:

+–[ RSA 2048]—-+
|o_o_o_o_o_o_o_o_o|
|_o_o_o_o_o_o_o_o_|
|o_o_o_o_o_o_o_o_o|
|_o_o_o_o_o_o_o_o_|
|o_o_o_o_o_o_o_o_o|
|_o_o_o_o_o_o_o_o_|
|o_o_o_o_o_o_o_o_o|
|_o_o_o_o_o_o_o_o_|
|o_o_o_o_o_o_o_o_o|
+—————–+

Si no se especifica un nombre de archivo se va a generar id_rsa.pub / id_rsa en la carpeta del usuario que está generando la clave.
Es recomendable asignar una frase de la contraseña – passphrase -.
La huella digital – fingerprint – y la imagen de arte al azar – randomart image – van a variar.

Incluir la clave pública en el servidor

Para copiar la clave pública en el servidor vamos a utilizar ssh-copy-id.

En OS X no viene instalado, pero podemos utilizar el siguiente script para instalarlo:

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

Una vez instalado lo utilizamos de la siguiente manera:

$ ssh-copy-id -i archivo.pub usuario@servidor
# Si SSH utiliza un puerto distinto lo podemos definir
# de esta manera. 
# $ssh-copy-id -i archivo.pub "usuario@servidor -p 1234"

# El servidor debe solicitar la contraseña del usuario. 
usuario@servidor's password:

En el caso de no contar con ssh-copy-id podemos copiar el archivo que contiene la clave pública al servidor.

Revisamos si en el directorio del usuario existe la carpeta .ssh
Si no existe la creamos.

Copiamos el contenido al archivo .ssh/authorized_keys

Si hacemos esto hay que revisar que la carpeta .ssh tenga los permisos 700
Y el archivo authorized_keys tenga los permisos 600

$ mkdir .ssh
 $ cat archivo.pub >> .ssh/authorized_keys
 $ chmod 700 .ssh
 $ chmod 600 .ssh/authorized_keys

Iniciar sesión sin contraseña

$ ssh usuario@servidor

# Si SSH utiliza un puerto diferente 
# hay que especificarlo: 
# $ssh -p 1234 usuario@servidor

La primera vez que iniciamos sesión, si establecimos un valor para la frase de la contraseña keychain (en os x) nos pregunta si queremos guardar la clave.

Aceptamos, las siguientes veces podemos iniciar sesión sin teclear contraseña.

En caso de no utilizar os x es necesario utilizar ssh-agent para guardar la frase de la contraseña.

# Seleccionar el archivo 
# que NO tiene extensión .pub
$ ssh-add archivo
Enter passphrase for archivo: 
Identity added: archivo