Ejecutar scripts en hosts remotos

En ocasiones queremos crear un proceso por lotes que nos haga todo el trabajo sucio, pero nos encontramos con un impedimento: debemos conectarnos a un host y realizar alguna tarea allí. Eso es un problema, porque si nosotros hacemos un comando de conexión SSH a otro host, los siguientes comandos que pongamos no se van a ejecutar en aquel. Necesitamos un plan.

Requisito opcional

Aunque no es obligatorio, sí es muy recomendable tener configuradas nuestras conexiones SSH mediante clave privada. Esto nos va a evitar dos cosas: tener que escribir a mano la contraseña del host al que queremos conectarnos y que se detenga el proceso para solicitarnos la contraseña.

Si lo tenemos configurado mediante claves SSH la conexión será transparente para nosotros y nos va ahorrar un tiempo precioso.

Otro consejo

Para que sea más legible el código podemos ahorrarnos escribir la dirección IP del host si lo metemos en una variable de entorno. Para ello, con el usuario con el que queramos ejecutar el proceso que se ejecutará en el host remoto editamos su archivo .bashrc (quiero destacar que todo esto lo hago en un entorno Ubuntu):

Ahora añadiremos al final del archivo una variable a la que daremos un nombre significativo y cuyo valor será la dirección IP o server name del host en el que ejecutaremos el comando, por ejemplo:

Lo guardamos con la combinación de teclas CTRL+O y salimos con CTRL+X. Para que esta variable de entorno funcione tendremos que salir de la terminal y volver a iniciarla. Para comprobar que funciona ejecutamos este comando y tenemos que tener como resultado la dirección IP que acabamos de añadir (es decir, 192.168.0.1):

Atención al símbolo de dolar que precede al nombre de la variable, muy al estilo PHP. Si ya con esto funcionamos, vamos al lío.

Cómo lo hacemos

Normalmente yo guardo los scripts en una carpeta del sistemas para tenerlos bien localizados. En mi caso utilizo /opt/scripts. Ahí creamos el archivo que vamos a ejecutar:

Ya en el editor de comandos nano, podemos utilizar el parámetro bash -c y meter entre comillas dobles el comando o comandos que queramos. En este ejemplo nos vamos a conectar al servidor remoto y vamos a consultar la versión de PHP que tiene instalada:

 

Guardamos con CTRL+O y salimos con CTRL+X. Ahora, si somos un usuario con los permisos adecuados podremos ejecutar el proceso por lotes y ver su resultado por pantalla, incluidos los mensajes que hemos añadido con el comando echo:

Cómo veis no tiene mucha ciencia este ejemplo, ya que no tiene mucha importancia conocer la versión de PHP que hay en un server (o sí). Sin embargo ahora podéis dejar volar vuestra imaginación y pensar en todo lo que se podría hacer. Os dejo caer una que quizá la explique algún día en el blog: cómo conectarse a un server remoto, hacer una copia de seguridad de un site, bajárselo a local e instalarlo en local.

 

Experto en la Gestión de Proyectos Web basados en Drupal con más de 8 años de experiencia. Desarrollo Full Stack (Front-end, Back-end, Site-Builder).

No Replies to "Ejecutar scripts en hosts remotos"