OpenSSH – conexión remota desde Putty con clave pública

Una medida de seguridad para conectarnos a nuestros servidores vía SSH es deshabilitar la autenticación con password y usar claves públicas con key passphrase.

De esta forma evitamos intentos de login por fuerza bruta, ya que es necesario conseguir la clave privada para poder acceder con éxito a nuestro servidor.


Escenario

En nuestro caso nos encontramos ante el siguiente escenario:

  • Equipo origen con Windows y Putty instalados.
  • Servidor destino con Debian y OpenSSH instalados.

 


Generar las claves pública y privada

Generamos las claves pública y privada desde Putty con la aplicación Puttygen pulsando la tecla Generate, la cual ya viene en la instalación inicial:

Guardamos la clave pública pulsando el botón Save public key indicando como nombre un archivo con extensión .pub.

Luego indicamos la Key passphrase y guardamos la clave privada pulsando el botón Save private key.

Almacenamos ambos archivos en un lugar seguro, para usarlo en cualquier equipo desde donde queramos conectarnos.


Servidor destino

En el servidor destino ejecutamos los siguientes pasos:

 

Crear el usuario

Creamos el usuario:

adduser pruebas --disabled-password

Si la versión de Debian no nos permite usar la opción disabled-password le deshabilitamos la contraseña con el comando:

passwd -u pruebas

-u --unlock desbloquea la contraseña de la cuenta indicada

 

Almacenar la clave pública en host destino

Creamos el directorio .ssh en el home del usuario creado y le cambiamos los permisos:

su pruebas
cd /home/pruebas/
mkdir .ssh
chmod 700 .ssh
cd .ssh

IMPORTANTE!!!, el propietario del directorio y todo su contenido ha de ser el mismo usuario, tanto para el usuario como para el grupo.

Ahora creamos el archivo authorized_keys2 y copiamos la clave pública en una línea, teniendo en cuenta:

  • No agregar el email al final de la línea.

  • No agregar las líneas BEGIN PUBLIC KEY o END PUBLIC KEY.

  • No agregar la línea rsa-key-20200103, o la numeración que tenga.

  • Comenzar la línea con ssh-rsa.

Por ejemplo:

ssh-rsa AAAAB3NzaC1yc2EAAAABJQAAAQEAjZ...9kWsZKQ==

Cambiamos los permisos del archivo creado:

chmod 600 authorized_keys2
chown pruebas: authorized_keys2

 

Configurar OpenSSH

RECOMENDACIÓN, la idea es eliminar el acceso por contraseña, pero antes de aventurarse a deshabilitar esta opción recomiendo no hacerlo para confirmar que el acceso con clave pública funciona. Esta opción sería PasswordAuthentication y le indicamos yes o no para habilitar o deshabilitarla respectivamente.

Configuramos el OpenSSH para conectarse sin contraseña y usando las claves almacenamos en el archivo creado en un apartado anterior.

Hacemos un backup del archivo de configuración de OpenSSH:

cd /etc/ssh/
cp sshd_config sshd_config.orig

Ahora lo editamos y cambiamos la siguiente configuración con tu editor favorito:

nano sshd_config
...
# Authentication:
LoginGraceTime 120
PermitRootLogin no
StrictModes yes
...
RSAAuthentication yes
##PubkeyAuthentication no
PubkeyAuthentication yes
AuthorizedKeysFile     %h/.ssh/authorized_keys2
...
PasswordAuthentication no
...
UseDNS no

Reiniciamos el servicio:

systemctl restart sshd

Acceso desde Putty

Podemos conectarnos con la clave privada que tenemos de dos maneras distintas:

  • Usando el agente de autenticación de Putty.

  • Indicando el certificado al crear la conexión al servidor desde Putty, y a su vez la key passphrase.

 

Agregar la clave privada al agente de autenticación de Putty

Iniciamos el agente de autenticación de Putty ejecutando el programa PAGEANT.EXE.

Aparece el siguiente icono en el panel derecho de los programas iniciados. Le damos con el botón derecho encima de este y seleccionamos la opción Add Key:

Seleccionamos la clave privada almacenada e indicamos la key Passphrase escogida cuando almacenamos la clave.

Este programa funciona como un almacén de Passphrase.

Ahora para acceder al servidor desde Putty usamos la siguiente configuración:

En donde X.X.X.X corresponde a la IP del servidor al cual nos queremos conectar y 22 el puerto SSH por defecto, o indicamos el que tenemos configurado en nuestro servidor destino si no usamos el puerto estándar.

Guardamos la configuración realizada indicándole un nombre, en mi caso Strato-2-CERT.

Putty usará la clave privada que hemos cargado con PAGEANT.EXE y ya no será necesario usar contraseñas para el acceso al servidor.

IMPORTANTE Cada vez que iniciemos sesión en el equipo necesitamos ejecutar este apartado, agregando la clave privada antes de conectarnos.

 

Indicar la clave privada a los datos de conexión

Si no queremos usar el agente de autenticación de Putty podemos indicar el certificado directamente desde la configuración de nuestro servidor destino, tal y como se indicó anteriormente. La única diferencia es que nos pedirá la key passphrase cada vez que nos conectemos. Esta es la opción que recomendamos para establecer una conexión SSH remota.

Configuramos el servidor destino, indicando el usuario, ip destino y puerto SSH en el que esté escuchando.

En donde X.X.X.X corresponde a la IP del servidor al cual nos queremos conectar y 22 el puerto SSH por defecto, o indicamos el que tenemos configurado en nuestro servidor destino si no usamos el puerto estándar.

Ahora indicamos la clave privada en la sección Connection -> SSH -> Auth y seleccionamos el archivo .ppk con la clave privada generada.

Para finalizar guardamos la configuración realizada indicándole un nombre, en mi caso Strato-2-CERT.

Ahora cada vez que nos conectemos nos pedirá la key passphrase, ofreciendo un nivel de seguridad máximo a la hora de conectarnos remotamente a nuestro servidor SSH.


Opcional

Elevar usuario a root

Opcionalmente podemos crear un acceso a root para el usuario creado, editando el visudo como usuario administrador:

root@h2847530:/# visudo

Y agregamos la siguiente línea:

...
pruebas ALL=(ALL) ALL
...

Ahora una vez accedemos al servidor con escribir sudo su nos pedirá la credencial y podremos elevarnos como root.

Si no queremos agregar la credencial debemos de agregar la línea con el siguiente formato:

...
pruebas ALL=(ALL) NOPASSWD: ALL
...

Enlaces de interés

Manual de instalación en Howtoforge