En este artículo voy a hablar de una app para Android que es extremadamente útil para ejecutar comandos de forma remota en un ordenador Linux: Hot Button SSH Command Widget. Esta aplicación nos permitirá lanzar cómodamente cualquier comando que se nos ocurra en un ordenador remoto a través de SSH con sólo pulsar un botón en la pantalla de nuestro móvil o tablet, lo cual no sólo nos facilitará la automatización de tareas repetitivas, sino que además resulta muy interesante desde el punto de vista de la seguridad por los mismos motivos que expuse en mi artículo Desbloqueo automático de pantalla por proximidad de dispositivo Bluetooth, ya que nos permitirá por ejemplo bloquear y desbloquear la pantalla sin tener que escribir nuestra contraseña una y otra vez a la vista de otras personas.
Aplicación Hot Button SSH Command Widget
Este tipo de apps (también disponibles para iOS) se pueden usar también para ejecutar comandos sobre sistemas Mac OS X y Windows si tienen el servicio SSH disponible. Lectura recomendada: Cómo crear un servidor SSH Windows.
Hay otras apps que también permiten asociar acciones a botones para ejecutar distintos comandos SSH desde nuestro dispositivo móvil, pero ésta en concreto permite también poner dichos botones como widgets en el lanzador de aplicaciones de Android (launcher), por lo que no tendremos que abrir previamente ninguna aplicación para poder lanzar los comandos que queramos, lo cual nos ahorarrá ese paso y nos permitirá lanzar comandos más rápidamente.
Básicamente lo que ofrece esta app es la posibilidad de crear hasta 30 botones distintos y asociarles un comando que se ejecutará en el ordenador remoto del mismo modo que si usáramos la opción de ejecutar un comando remoto que ofrece el cliente genérico de ssh:
$ ssh user@remote_server "uname -a" Linux remote_server 4.4.0-79-generic #100-Ubuntu SMP Wed May 17 19:58:14 UTC 2017 x86_64 x86_64 x86_64 GNU/Linux
La aplicación permite configurar tanto el ordenador remoto al que lanzaremos el comando como las credenciales de acceso que utilizaremos, de forma que no se nos pida usuario y contraseña cada vez que pulsemos un botón. También se permite la autenticación mediante claves RSA (en realidad cualquier tipo de clave pública que acepte el servidor remoto al que queremos conectar). Para ello tendremos que generar una clave privada y copiarla en algún lugar de la sdcard de nuestro teléfono en el que pase desapercibida, con un nombre que no llame la atención y a ser posible en una carpeta cuyo nombre comience con punto (.) para que esté oculta.
Error: Your Requested widget " ai_widget-6" is not in the widget list.
- [do_widget_area above-nav-left]
- [do_widget_area above-nav-right]
- [do_widget_area footer-1]
- [do_widget id="wpp-4"]
- [do_widget_area footer-2]
- [do_widget id="recent-posts-4"]
- [do_widget_area footer-3]
- [do_widget id="recent-comments-3"]
- [do_widget_area footer-4]
- [do_widget id="archives-4"]
- [do_widget_area logo-bar]
- [do_widget id="oxywidgetwpml-3"]
- [do_widget_area menu-bar]
- [do_widget id="search-3"]
- [do_widget_area sidebar]
- [do_widget id="search-4"]
- [do_widget id="ai_widget-2"]
- [do_widget id="categories-5"]
- [do_widget id="ai_widget-3"]
- [do_widget id="ai_widget-4"]
- [do_widget id="ai_widget-5"]
- [do_widget_area sub-footer-1]
- [do_widget id="text-4"]
- [do_widget_area sub-footer-2]
- [do_widget_area sub-footer-3]
- [do_widget_area sub-footer-4]
- [do_widget_area upper-footer-1]
- [do_widget id="search-2"]
- [do_widget id="recent-posts-2"]
- [do_widget id="recent-comments-2"]
- [do_widget id="archives-2"]
- [do_widget id="categories-2"]
- [do_widget id="meta-2"]
- [do_widget_area upper-footer-2]
- [do_widget_area upper-footer-3]
- [do_widget_area upper-footer-4]
- [do_widget_area widgets_for_shortcodes]
- [do_widget id="search-5"]
- [do_widget id="ai_widget-6"]
- [do_widget_area wp_inactive_widgets]
- [do_widget id="wpp-2"]
- [do_widget id="text-1"]
- [do_widget id="recent-posts-3"]
- [do_widget id="categories-3"]
- [do_widget id="archives-3"]
- [do_widget id="icl_lang_sel_widget-3"]
Después añadiremos la clave pública emparejada con nuestra clave privada al fichero ~/.ssh/authorized_keys del ordenador remoto, y así conseguiremos que nuestros comandos se ejecuten instantáneamente en cuanto pulsemos el botón deseado.
Algunas ideas de comandos útiles que lanzar desde nuestro móvil
A continuación dejo algunas ideas de botones que pueden resultar interesantes para controlar a distancia nuestro propio PC si nos encontramos lejos de nuestro lugar de trabajo y también aunque estemos cerca pero la pantalla se encuentra bloqueada o el monitor apagado. Así nos ahorraremos esos segundos extras que le lleva el monitor reactivarse y a nosotros introducir la contraseña para desbloquear la pantalla:
Acción deseada | Ejemplo comando |
Entrar en suspensión | sudo /bin/systemctl suspend |
Apagar ordenador | sudo /bin/systemctl poweroff |
Reiniciar ordenador | sudo /bin/systemctl restart |
Desbloquear pantalla | sudo loginctl unlock-sessions (Plasma Desktop 5) gnome-screensaver-command -d (Gnome) cinnamon-screensaver-command -d (Cinnamon) mate-screensaver-command -d (Mate Desktop) pkill xscreensaver (otros gestores de ventanas) |
Audio mute/unmute | amixer -q -D pulse sset Master toggle |
Error: Your Requested widget " ai_widget-6" is not in the widget list.
- [do_widget_area above-nav-left]
- [do_widget_area above-nav-right]
- [do_widget_area footer-1]
- [do_widget id="wpp-4"]
- [do_widget_area footer-2]
- [do_widget id="recent-posts-4"]
- [do_widget_area footer-3]
- [do_widget id="recent-comments-3"]
- [do_widget_area footer-4]
- [do_widget id="archives-4"]
- [do_widget_area logo-bar]
- [do_widget id="oxywidgetwpml-3"]
- [do_widget_area menu-bar]
- [do_widget id="search-3"]
- [do_widget_area sidebar]
- [do_widget id="search-4"]
- [do_widget id="ai_widget-2"]
- [do_widget id="categories-5"]
- [do_widget id="ai_widget-3"]
- [do_widget id="ai_widget-4"]
- [do_widget id="ai_widget-5"]
- [do_widget_area sub-footer-1]
- [do_widget id="text-4"]
- [do_widget_area sub-footer-2]
- [do_widget_area sub-footer-3]
- [do_widget_area sub-footer-4]
- [do_widget_area upper-footer-1]
- [do_widget id="search-2"]
- [do_widget id="recent-posts-2"]
- [do_widget id="recent-comments-2"]
- [do_widget id="archives-2"]
- [do_widget id="categories-2"]
- [do_widget id="meta-2"]
- [do_widget_area upper-footer-2]
- [do_widget_area upper-footer-3]
- [do_widget_area upper-footer-4]
- [do_widget_area widgets_for_shortcodes]
- [do_widget id="search-5"]
- [do_widget id="ai_widget-6"]
- [do_widget_area wp_inactive_widgets]
- [do_widget id="wpp-2"]
- [do_widget id="text-1"]
- [do_widget id="recent-posts-3"]
- [do_widget id="categories-3"]
- [do_widget id="archives-3"]
- [do_widget id="icl_lang_sel_widget-3"]
Otros ejemplos de comandos que podemos ejecutar en nuestro ordenador local:
- Comenzar/detener grabación de vídeo desde nuestra webcam con el fin de vigilar el entorno de trabajo cuando no estemos presentes
- Controlar el reproductor de música
- Cambiar nuestro estado en nuestro cliente de chat favorito
- Etc.
Ejecución de comandos que requieren privilegios de root
Como se puede ver en la tabla del apartado anterior, hay comandos que requieren privilegios de root para poder ejecutarse. Aunque la app tiene una opción de configuración para ejecutar comandos como root, yo prefiero por cuestiones de seguridad deshabilitar siempre el acceso por SSH al usuario root. Así, creo que la forma más recomendable de ejecutar comandos que requieren root es añadir una entrada al fichero sudoers que permita su ejecución mediante sudo sin que se nos pida contraseña. En el caso de los ejemplos anteriores habría que añadir las siguientes líneas:
daniloaz ALL=(ALL) NOPASSWD:/bin/systemctl poweroff,/bin/systemctl halt,/bin/systemctl reboot,/bin/systemctl suspend daniloaz ALL=(ALL) NOPASSWD:/bin/loginctl lock-sessions,/bin/loginctl unlock-sessions
Otras ideas interesantes
Esta app también nos puede servir para automatizar algunas acciones que de otro modo nos obligarían a tener que establecer conexiones manualmente con servidores remotos con cierta frecuencia.
Algunos ejemplos:
- Parar y arrancar alguna aplicación que se queda colgada frecuentemente hasta que encontremos una solución definitiva que solucione el problema.
- Recibir una notificación push en el móvil con la salida de un determinado comando.
- Reiniciar un servidor que se ha quedado colgado debido a un aumento desproporcionado y anómalo de la carga.
- Limpiar cachés que se llenan con frecuencia.
- Implementar un mecanismo de autenticación multifactor (MFA).
- Etc.
¡El límite es tu imaginación! ¿Se te ocurre algún ejemplo más?
1 comentario
Unirte a la conversaciónJavier Ojanguren Otazua - 14/12/2019
Hola:
buen articulo ,quiero compartir contigo que una buena aplicación para control de ordenadores a distancia es telegram , ya que con esta aplicación puedes controlar sistemas linux , sin necesidad de resolver las ips , lo que agiliza enormemente la tarea, entre otras muchas cosas que se puede hacer.
Un saludo