Cómo ejecutar un script local en un servidor Linux remoto


fatmawati achmad zaenuri/Shutterstock.com

La creación de secuencias de comandos de tareas repetitivas mejora la eficiencia de la administración del sistema. Eso es genial para máquinas locales, pero ¿qué sucede si supervisa servidores remotos? ¿Puedes ejecutar un local guión en un remoto ¿computadora? ¡Sí!

Conexiones remotas

La administración remota del sistema generalmente implica hacer una conexión a la computadora remota a través de un secure shella conexión. La conexión SSH le proporciona un símbolo del sistema en la computadora remota. Luego puede continuar y realizar cualquier mantenimiento del sistema que sea necesario.

Las secuencias de comandos de Shell ayudan al permitirle envolver una secuencia de comandos en una secuencia de comandos que se puede ejecutar como si fuera un programa, combinando muchas acciones en una instrucción de línea de comando.

A medida que pasa el tiempo, modificará y mejorará sus scripts. Si tiene muchas máquinas remotas para administrar, mantener la copia de cada script en cada servidor actualizada y actualizada es una molestia y una sobrecarga molesta. Se convierte en una tarea administrativa en sí misma y consume el ahorro de tiempo que se supone que ofrece el uso de scripts.

La solución ideal le permitiría mantener sus scripts en su máquina local y ejecutarlos en las computadoras remotas a través de la conexión SSH. Eso le brindaría una administración simplificada con una colección centralizada de secuencias de comandos, y la misma secuencia de comandos actualizada se ejecuta en todas las computadoras.

Bash y SSH proporcionan una manera de hacer precisamente eso.

Conexiones SSH sin contraseña

La mejor manera de hacerlo es con conexiones sin contraseña, utilizando claves SSH. Al generar claves SSH en su computadora local y enviarlas a cada una de las computadoras remotas, puede conectarse a las computadoras remotas de manera segura y conveniente, sin que se le solicite una contraseña cada vez.

Aunque pueden resultar intimidantes para los usuarios primerizos, las claves SSH no son realmente difíciles. Son fáciles de generar, simples de instalar en los servidores remotos y sin fricción cuando los usa con SSH. Los únicos requisitos previos son que las computadoras remotas tengan el demonio SSH sshd en ejecución y que tiene una cuenta de usuario en el equipo remoto.

Si ya está realizando la administración remota del sistema en ellos, ambos requisitos ya deben estar satisfechos.

Para generar un par de claves SSH, escriba:

ssh-keygen

Si tiene una cuenta llamada «dave» en una computadora llamada «fedora-36.local», puede enviarle e instalar su clave pública SSH con este comando:

ssh-copy-id [email protected]

Ahora, al realizar una conexión SSH de la forma habitual, se autenticará mediante las claves SSH. Se le coloca en un símbolo del sistema en el servidor remoto sin que se le solicite una contraseña.

ssh [email protected]

Ejecutar un script local de forma remota

Para estas pruebas, nuestro servidor remoto es una computadora Linux llamada “fedora-36.local”. Hemos configurado claves SSH y hemos probado nuestra conexión sin contraseña al servidor remoto desde nuestra computadora local.

Nuestro guión es muy simple. Escribe una marca de tiempo en un archivo llamado «timestamp.txt», en el servidor remoto. Tenga en cuenta que el guión concluye con el comando de salida. Esto es importante, en algunos sistemas más antiguos es posible que un script se ejecute hasta el final, pero la conexión SSH se mantiene abierta.

#!/bin/bash

date >> timestamp.txt

exit 0

Copie este texto en un editor, guárdelo como «local.sh» y luego use chmod para hacerlo ejecutable.

chmod +x local.sh

Usando chmod para hacer un script ejecutable

En nuestra máquina local, ejecutaremos el script de esta manera:

ssh [email protected] 'bash -s' < local.sh

lanzamiento de un script local para ejecutar en un servidor remoto a través de SSH

Así es como funciona esto.

  • ssh [email protected]: La conexión SSH que estamos haciendo a la máquina remota. Esto usa el ssh comando, la cuenta de usuario preexistente en el servidor remoto y la dirección del servidor remoto.
  • ‘bash-s’: Esto hace que Bash lea los comandos del flujo de entrada estándar. Permite que Bash lea la entrada redirigida o canalizada.
  • < local.sh: Estamos redirigiendo el script a Bash.

Cuando se ejecuta el script, regresamos al símbolo del sistema de la máquina local. Saltando a nuestra máquina remota, podemos usar cat para mirar dentro del archivo «timestamp.txt».

cat timestamp.txt

Podemos ver la marca de tiempo de la última conexión, y actualmente la única. Ejecutar el script local varias veces más agrega las marcas de tiempo correspondientes al archivo remoto.

cat timestamp.txt

Por supuesto, en una situación del mundo real, su guión haría algo más útil. Pero incluso nuestro ejemplo trivial demuestra que se está ejecutando un script local en un servidor remoto.

Pasando Argumentos al Script

Puede pasar argumentos de línea de comando al script. Modificaremos nuestro script para esperar tres parámetros de línea de comando. Estos se redireccionan al archivo «timestamp.txt» junto con la marca de tiempo.

Guarde este script como «local2.sh» y hágalo ejecutable con chmod.

#!/bin/bash

echo "$1 $2 $3" >> timestamp.txt
date >> timestamp.txt

exit 0

El comando que necesitamos usar es similar al ejemplo anterior, con algunos cambios.

ssh [email protected] "bash -s" -- < local2.sh "How-To Geek" "Linux" "Articles"

lanzar un script local con parámetros de línea de comando para ejecutar en un servidor remoto a través de SSH

El guion doble “--” le dice a Bash que lo que sigue no debe ser considerado como parámetro de línea de comando para el ssh dominio. Los tres parámetros para la secuencia de comandos siguen al nombre de la secuencia de comandos, como de costumbre. Tenga en cuenta que hemos utilizado una barra invertida «” para escapar del espacio en el parámetro “How-To Geek”.

podemos consultar con cat que nuestros parámetros fueron recibidos y manejados correctamente en el servidor remoto.

cat timestamp.txt

Comprobación de que los parámetros del script se recibieron y procesaron correctamente en el servidor remoto

Ejecutar una sección de un script de forma remota

Si tiene una secuencia de comandos que necesita realizar algún procesamiento local para determinar qué acciones pueden ser necesarias en los servidores remotos, puede agregar una sección directamente en esa secuencia de comandos para realizar las acciones remotas por usted.

Podemos lograr esto usando aquí documentos. Aquí los documentos nos permiten redirigir líneas desde una sección etiquetada de un script a un comando. El procesamiento local se puede realizar por encima y por debajo del documento aquí.

Este es el script «local3.sh», que contiene un documento aquí.

#!/bin/bash

# local processing can done here

# remote processing is done here
ssh -T [email protected] << _remote_commands

# commands to be run remotely would be added here
cd /home/dave/Documents
# etc.

# Finally, update the timestamp file
echo "Script3.sh:" $(date) >> /home/dave/timestamp.txt

# this is the label that marks the end of the redirection
_remote_commands

# more local processing can be done here

exit 0

estamos usando el ssh comando con los mismos detalles de conexión que antes. Nos estamos conectando como usuario «dave» en un servidor remoto llamado «fedora-36.local». También estamos usando el -T (deshabilitar asignación de pseudo-terminal) opción. Esto evita que el servidor remoto proporcione un terminal interactivo para esta conexión.

La redirección”<<” va seguido del nombre de un etiqueta. En este ejemplo, estamos usando «_remote_commands». No hay nada especial en esta etiqueta, es simplemente una etiqueta.

Todos los comandos que aparecen en las líneas siguiendo la redirección se envía a través de la conexión SSH. La redirección se detiene cuando se encuentra la etiqueta. La ejecución del script luego continúa con la línea que sigue a la etiqueta.

Ejecutemos nuestro script de procesamiento mixto local/remoto.

./local3.sh

Lanzamiento de script3.sh con una combinación de procesamiento local y remoto

Como era de esperar, vemos una nueva entrada en el archivo «timestamp.txt».

cat timestamp.txt

Amplíe su alcance

Poder ejecutar scripts de forma remota (que se escriben, almacenan y mantienen localmente) proporciona una herramienta de administración conveniente. Saber que se ejecuta exactamente la misma versión de un script en todos sus servidores remotos facilita mucho la administración.

RELACIONADO: Cómo administrar servidores Linux con la interfaz web de Cockpit





Source link-39