Tanto por seguridad como por comodidad siempre que podamos es preferible utilizar la autenticación con clave pública y prescindir de contraseñas, además existen toda una serie de servicios que aunque permitan conexiones sftp exigen directamente este método. En este Cybertruco vamos a ver cómo podemos utilizar este sistema de manera sencilla en nuestro servidor SFTP en Linux para que los diferentes usuarios se logueen de manera segura simplemente proporcionandonos su clave pública.

ssh

 

Partimos de la base de un Cybertruco anterior en que veíamos como podíamos habilitar cuentas de usuario dedicadas para el servicio sftp, en este escenario ya tenemos un grupo de usuarios, con sus correspondientes miembros y una tura dedicada para sftp. Tenemos también configurado y en marcha el servicio sshd, que nos permite conectarnos a través de un cliente ftp cualquiera, por ejemplo Filezilla autenticando con usuario/contraseña.

Llegados a este punto, queremos mejorar la seguridad del sistema, para que los usuario se olviden por completo de las contraseñas y que puedan usar su clave pública en este y otros servidores. Para ello solo necesitaríamos recibir de los usuarios su clave pública, pero a modo de ejemplo vamos a ver como es de sencillo generar claves para estos usuarios y a posteriori configurar tanto el cliente como el servidor para su uso.

Generar claves RSA

Para generar y obtener una clave privada y una pública utilizaremos el comando ssh-keygen indicando el tipo. En este caso utilizamos RSA.

ssh-keygen -t rsa

Durante la generación, se nos pedírá una passphrase (opcional) y nos generará ambas claves. Si no hemos indicado lo contrario, se habrá creado dentro de nuestro directorio en /home un directorio .ssh el cual ahora contiene ambas claves, id_rsa e id_rsa_pub.Este último fichero, id_rsa_pub, nuestra clave pública es la que tendremos que situar en cualquier servidor al cual queramos acceder sin tener que depender de contraseñas.

Establecer claves autorizadas

Para este ejemplo vamos a suponer que la conexión la queremos establecer contra el mismo servidor en el cual hemos creado las claves. Recordemos que tenemos un nuevo directorio dentro de nuestro /home, que contiene la clave privada y la pública. Ahora tenemos que crear un fichero llamado authorized_keys que contendrá la clave pública del usuario que quiera conectar. En este caso la misma que hemos creado en el paso anterior.
Para ello simplemente usamos el comando mv

mv id_rsa_pub authorized_keys

Es posible que dependiendo del usuario que estemos utilizando para esto o de los permisos, tengamos que ajustar con chmod o chown los permisos en este fichero que ha de poder ser leido por el usuario en cuestión.

Ajustar opciones del servicio sshd

Una vez ya tenemos colocada la clave pública como clave autorizada, vamos a cambiar algunos settings en el servicio SSHD para que este acepte la autenticación a través de clave RSA. Para ello primero editaremos su configuración con vi

vi /etc/ssh/sshd_config

Y descomentaremos las siguientes líneas en el código. Si no localizais alguna debido a alguna edición previa del fichero la podéis escribir directamente. La última linea la podríamos dejar con yes, por si quisieramos mantener para otros usuarios la autenticación basada en contraseña.

RSAAuthentication yes
PubkeyAuthentication yes
AuthorizedKeysFile .ssh/authorized_keys
PasswordAuthentication no

Configurar cliente SFTP para el uso de clave RSA

Llegados a este punto, ya tenemos nuestro servidor preparado para recibir conexiones SFTP haciendo uso de la clave pública que almacena. Ahora solo nos queda configurar nuestro cliente para que a partir de la clave privada que poseemos nos permita conectarnos a ese y a cualquier otro servidor en el que establezcamos nuestra clave pública.

Vamos a utilizar como ejemplo Filezilla para Windows. En el servidor podemos visualizar el contenido de nuestra clave privada con

cat ~/.ssh/id_rsa

Copiamos su contenido y creamos un fichero local, que puede ser un simple txt y en el pegamos el texto. Una vez en Filezilla, vamos a edit->settings->sftp y añadimos el fichero con la clave privada. Nos pedirá pasarlo a formato ppk y en caso que hayamos establecido una passphrase anteriormente la tendremos que indicar en este paso. Una vez hecho esto, solo nos quedará configurar el sitio de sftp seleccionando la autenticación con fichero de clave y seleccionando el fichero local.