SSH (parte V): Ejecutar aplicaciones remotas mediante un script de Ubuntu
Poco a poco, estamos viendo estos días lo fácil que resulta acceder de forma remota a un ordenador que ejecuta Ubuntu. El objetivo no tiene por qué ser siempre administrarlo. También podríamos, por ejemplo, utilizar el equipo más potente de la casa entre varios usuarios, algunos de ellos, accediendo desde ordenadores mucho menos potentes.
En este contexto, el otro día vimos cómo Ejecutar aplicaciones gráficas de forma remota, aunque, si lo vas a hacer a diario, puede resultar un poco pesado. Sin embargo, para simplificarlo, puedes utilizar un script.
El único problemilla que podemos encontrarnos es que, por seguridad, ssh utiliza el acceso directo a la terminal para asegurarse de que es un usuario el que escribe la contraseña de forma manual en el momento de la conexión. Sin embargo, para resolverlo, podemos utilizar el programa sshpass, que está diseñado para simular la entrada de dicha contraseña de forma interactiva y así poder automatizar la ejecución del comando ssh dentro de un script.
Dado que sshpass está incluido en los repositorios predeterminados de Ubuntu, basta con abrir una ventana de terminal (por ejemplo, usando la combinación de teclas Alt + Ctrl + T), y escribir el siguiente comando para instalarlo:
sudo apt-get install sshpass
Una vez terminada la instalación de sshpass, estamos listos para comenzar la escritura de nuestro script. Por ejemplo, usando el editor gEdit:
gedit navega.sh
En mi caso, llamaré al script navega.sh, porque he decidido mostrarte como ejecutar el navegador Firefox del ordenador remoto desde el ordenador local.
El contenido del script deberá ser parecido a este:
#!/bin/bash sshpass -p "P@ssWord" ssh -o StrictHostKeyChecking=no -p 5000 -X usuario@192.168.1.57 firefox
Como ves, además de la primera línea, que es obligatoria en todos los scripts de linux, sólo tenemos una línea más. Además, si seguiste nuestro artículo anterior (SSH (parte IV): Ejecutar aplicaciones gráficas de forma remota desde otro equipo con Ubuntu 16.04 LTS), ya conoces la mayor parte de la sintaxis.
La diferencia principal es que ahora es el comando sshpass el que se encarga de llamar a ssh. Antes debemos indicarle, con el argumento -p, la contraseña que debe pasarle cuando la requiera. Y dicha contraseña la indicamos entre comillas.
Por último, usando shell script, también debemos deshabilitar la comprobación de teclas de acceso rápido. Para lograrlo, usaremos el argumento -o, que nos ofrece la posibilidad de definir valores de diferentes opciones, como si se encontraran en el archivo de configuración. En este caso, debemos establecer el valor del parámetro StrictHostKeyChecking como no.
Como puedes comprobar, el resto de la sintaxis coincide con lo que ya conoces.
Para nuestro ejemplo, ejecutaremos el navegador Firefox del equipo remoto.
3
Cuando terminemos de escribir el contenido del archivo, debemos asegurarnos de guardar los cambios.
Con esto, ya habremos creado el script. Sin embargo, aún no dispone de permisos de ejecución, aunque, para resolverlo, sólo tenemos que escribir el siguiente comando:
chmod +x navega.sh
Recuerda cambiar el nombre del archivo navega.sh por el que hayas elegido para tu script.
Ya sólo nos queda comprobar el resultado ejecutando el script. Por ejemplo, escribiendo la siguiente orden:
./navega.sh
Poco después, veremos que se abre la ventana del navegador.
Aunque no notes la diferencia, se trata del navegador del equipo remoto. De este modo, si durante nuestra navegación hiciésemos clic, por ejemplo, sobre un archivo PDF, el visor que se ejecutaría también sería el del ordenador remoto.
En próximas ejecuciones, no será necesario que abras una ventana de terminal, bastará con que pongas el script en un lugar que te resulte fácilmente accesible desde tu interfaz gráfica y hagas doble clic sobre su icono.
Antes de terminar, me gustaría hacerte una pequeña sugerencia: Si te pone nervioso dejar la contraseña como texto plano, y no quieres ejecutar el script desde la terminal para escribirla cada vez, puedes utilizar zenity.
Se trata de un programa que puede ejecutarse desde un script para mostrar un cuadro de diálogo que pida información al usuario. Lo que éste escriba puede guardarse fácilmente en una variable del propio script.
Aunque zenity no es el objeto del artículo de hoy, en el siguiente cuadro te muestro un ejemplo de cómo lo usaríamos. Creo que es suficientemente ilustrativo:
#!/bin/bash pass=$(zenity --entry --title "Password" --text "Contraseña de usuario" --entry-text "") sshpass -p "$pass" ssh -o StrictHostKeyChecking=no -p 5000 -X usuario@192.168.1.57 firefox
Observa que ahora la contraseña no se muestra en texto plano. Se le pedirá al usuario cada vez que ejecutemos el script y se guardará en la variable pass. Después, sshpass enviará el contenido de la variable al comando ssh.
Al volverlo a ejecutar, lo primero que se muestra es el cuadro de diálogo solicitando la contraseña (observa que se muestran los textos que incluíamos en los argumentos –title y –text).
8
Escribimos la contraseña y pulsamos la tecla Intro. También podemos utilizar los botones Aceptar o Cancelar. En este último caso, no se tiene en cuenta lo que hayamos escrito
Si la contraseña es correcta, el script volverá a realizar su trabajo.
Y hasta aquí el artículo de hoy. Espero que te resulte útil.
Todos los artículos de la serie…
- SSH (parte I): Administrar Ubuntu desde un equipo diferente.
- SSH (parte II): Acceder desde otro equipo con Ubuntu 16.04 LTS.
- SSH (parte III): Acceder desde otro equipo con Windows 10.
- SSH (parte IV): Ejecutar aplicaciones gráficas de forma remota desde otro equipo con Ubuntu 16.04 LTS.
- SSH (parte V): Ejecutar aplicaciones remotas mediante un script de Ubuntu.
- SSH (parte VI): Ejecutar aplicaciones gráficas de forma remota desde otro equipo con Windows 10.
- SSH (parteVII): Asegurar las conexiones xRDP entre Ubuntu Mate 16.04 y Windows 10.