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
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