Proteger el acceso por SSH (II)

Después de haber configurado el servicio SSH para hacerlo un poco más seguro, hoy vamos con la segunda entrega. En este caso vamos a ver como asegurar nuestro servidor SSH mediante el uso de certificados, un paso más allá que evitará que el servidor solicite autenticación si previamente no se ha enviado un certificado.

El primer paso será generar un certificado en el equipo cliente, para ello podemos optar por dos alternativas, la primera usar la ssh-keygen y la segunda utilizar la PuTTYgen. Si utilizáis indistintamente la shell y el PuTTY para acceder a servidores remotos entonces deberíais usar los dos formatos. Accedemos al equipo cliente y lanzamos el comando:

# ssh-keygen

Nos pedirá la ruta donde queremos guardar el fichero (pulsando enter se guardará en la ruta por defecto), y luego nos pedirá el passphrase. Se podría dejar en blanco y que simplemente se accediese al servidor sin ninguna contraseña, pero como hablamos de la seguridad lo primero usaremos un passphrase. También podemos omitir estos pasos indicandolos como parametros:

# ssh-keygen [-b bits] -t type [-N passphrase] [-f fichero]

Con la opción -b indicamos el número de bits, por defecto son 2048 y el valor mínimo es 768. Con -t indicamos el tipo (rsa o dsa, por defecto rsa que es el que usaremos). Con -N indicamos el passphrase y con -f el fichero de salida del certificado.

Una vez completado tendremos dos ficheros en la ruta especificada id_rsa e id_rsa.pub, que como parece obvio es el que contiene la clave pública, mientras que id_rsa contiene la clave privada.

Ahora toca trasladar al servidor la clave pública, para ello podemos echar mano del comando ssh-copy-id del siguiente modo:

# ssh-copy-id [-i fichero_clave] usuario@servidor

Con la opción -i indicaremos el fichero que contiene la clave pública generada en el paso anterior. Solicitará el passphrase y se instalará en .ssh/autorized_keys

Una vez completado este paso ya podemos acceder al servidor mediante el uso de los certificados y en lugar de pedir el password nos pedirá el passphrase. Ahora nos queda hacer que el servidor no responda ninguna petición si no viene acompañada de certificado, para ello editamos el fichero /etc/ssh/sshd_config, cambiamos la directiva PasswordAuthentication a no y reiniciamos el servicio sshd.

Ya sólo nos queda una cosa más. Si accedéis por SSH usando PuTTY entonces necesitareis convertir vuestro certificado. Para ello echaremos mano de PuTTYgen, en el menú Conversiones >> Importar clave y buscaremos el fichero de clave privada (id_rsa). Pulsamos en Generar y luego en Guardar clave privada.

Ahora ya tenemos nuestra clave privada en formato ppk. Para usarla con PuTTY tendremos que acceder a Connection >> SSH >> Auth e insertar ahí la clave, luego loguearnos como de costumbre.