Acceder vía ssh con contraseña de forma segura

Es posible que este artículo te sorprenda, porque creo que he repetido hasta la saciedad eso de acceso sin contraseña. Pero, ¿que sucede si no puedes acceder vía ssh con clave público privada? Ahora mismo, no caigo en la situación que te puedes encontrar para que esto suceda. Sin embargo, en el caso de que suceda tan solo tendrás que recurrir a este artículo para poder acceder vía ssh con contraseña.

Lo cierto, es que la idea de este artículo es ir un paso mas allá, y aunque tengas que acceder vía ssh con usuario y contraseña, se trata de utilizar mecanismos para que sea lo mas seguro posible. La cuestión como de costumbre es básicamente la automatización. Es decir, a pesar de tener que acceder vía ssh con usuario y contraseña utilizando un script, que estos datos estén protegidos de la mirada ajena.

Acceder vía ssh con usuario y contraseña

Acceder vía ssh con usuario y contraseña

El problema reside en que no es posible pasar a ssh tu contraseña de forma directa, sino que tienes utilizar una herramienta intermedia. Una herramienta que está disponible en las principales distribuciones es sshpass.

sshpass es una utilidad que te permite utilizar ssh de forma no interactiva, y es que ssh está pensado para que tu introduzcas la contraseña. La ventaja que presenta sshpass es que no solo te permite pasar la contraseña directamente utilizando la opción -p, sino que también se la puedes pasar mediante un archivo.

Instalación

sshpass se encuentra en los repositorio oficiales de Ubuntu, con lo que la instalación es muy sencilla, tan solo tienes que ejecutar la siguiente instrucción en un terminal,

sudo apt install sshpass

Uso y funcionamiento

Como te he comentado anteriormente, el uso de esta herramienta se ciñe a pasar tu contraseña a ssh. De las diferentes opciones que tiene, me quedo con la de pasar directamente utilizando la opción -p o bien, mediante archivo. Así, en el primer caso, el uso será el siguiente,

sshpass -p '12345678' ssh lorenzo@192.168.1.48

La otra opción es utilizar un archivo. Para crear el archivo, es tan sencillo como,

echo '12345678' > ~/.secreto
chmod 400 ~/.secreto

Una vez creado, simplemente tenemos que ejecutar la siguiente instrucción

sshpass -f ~/.secreto ssh lorenzo@192.168.1.48

Evidentemente cualquiera de estas dos acciones es una auténtica imprudencia. La razón es sencilla, y es que estamos dejando a la vista de cualquiera que tenga acceso a nuestra cuenta, o a nuestros scripts la contraseña de acceso a nuestro servidor.

La solución pasa por cifrar el archivo que contiene la contraseña. En este sentido te doy dos soluciones, una mas general , en la que utilizas gpg, y una mas particular que te explicará mas adelante.

Utilizando gpg para acceder vía ssh con contraseña

Es muy sencillo en Linux cifrar y descifrar archivos utilizando GnuPG. Tan sencillo como ejecutar la siguiente instrucción en un terminal,

gpg -c .secreto

Esta instrucción nos preguntará por una frase de paso, y además que la repitamos. Una vez ejecutada, nos genera un archivo como .secreto.gpg cuyo contenido es completamente indescifrable. Este archivo es el que puedes utilizar para tu conexión mediante ssh. Tan solo tienes que ejecutar la siguiente instrucción,

sshpass -p "$(gpg -d -q .secreto.gpg)" ssh lorenzo@192.168.1.48

Dicho esto, dos aspectos para mejorar la seguridad. El primero es que tienes que borrar .secreto. Es decir, tienes que borrar el archivo en el que se encuentra la clave sin cifrar. Y por otro lado, quita permisos de lectura al archivo .secreto.gpg. Para ello, ejecuta la siguiente instrucción,

chmod 400 .secreto.gpg

Utilizando gkeyring para acceder vía ssh con contraseña

Esta es una herramienta que implementé hace algún tiempo, que utiliza el anillo de claves de KDE, GNOME, o el de tu entorno de escritorio por defecto. Esto es una ventaja, porque no te tienes que acordar de ninguna contraseña ni clave de paso, ni nada por el estilo. Simplemente tienes que utilizar el anillo de claves de tu escritorio.

Instalación

como te puedes imaginar, esta herramienta no se encuentra en los repositorios oficiales de Ubuntu. Sin embargo, la puedes instalar fácilmente ejecutando las siguientes líneas en un terminal,

sudo apt update
sudo apt install gkeyring

Uso y funcionamiento

Puedes encontrar toda la información sobre esta herramienta en gkeyring. Pero, para que veas lo sencillo que es utilizarla junto a sshpass, te indicaré un par de ejemplos.

Para guardar una contraseña en el anillo de claves,

gkeyring -s -k raspberry -p 12345678

En este caso he establecido para la clave raspberry la famosa contraseña 12345678. En el caso de que quieras recuperar la contraseña, tendrás que ejecutar la siguiente instrucción,

gkeyring -g -k raspberry

Para el caso que nos ocupa, de utilizarla junto con sshpass, la solución es tan sencilla como en el caso de gpg. Por ejemplo,

sshpass -p "$(gkeyring -g -k rpi)" ssh lorenzo@192.168.1.48

Conclusiones

Como he comentado en mas de una ocasión, prefiero la solución de utilizar clave público privada, antes que el acceso ssh con contraseña. Sin embargo, cuando no tienes mas opciones, cualquiera de las dos soluciones que te he comentado aquí, gpg y gkeyring te puede ser de gran utilidad.

En particular, prefiero la segunda de las opciones. No porque sea el padre de la criatura, sino porque de esta forma todas las contraseñas quedan recogidas en un mismo punto, y el custodio, es el sistema que utilice por defecto tu entorno de escritorio, ya sea KDE o GNOME.


Más información

Deja un comentario

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *