{"id":154560,"date":"2022-09-09T14:29:34","date_gmt":"2022-09-09T14:29:34","guid":{"rendered":"https:\/\/magazineoffice.com\/como-ejecutar-un-script-local-en-un-servidor-linux-remoto\/"},"modified":"2022-09-09T14:29:35","modified_gmt":"2022-09-09T14:29:35","slug":"como-ejecutar-un-script-local-en-un-servidor-linux-remoto","status":"publish","type":"post","link":"https:\/\/magazineoffice.com\/como-ejecutar-un-script-local-en-un-servidor-linux-remoto\/","title":{"rendered":"C\u00f3mo ejecutar un script local en un servidor Linux remoto"},"content":{"rendered":"


\n<\/p>\n

\n
fatmawati achmad zaenuri\/Shutterstock.com<\/span><\/figcaption><\/figure>\n

La creaci\u00f3n de secuencias de comandos de tareas repetitivas mejora la eficiencia de la administraci\u00f3n del sistema. Eso es genial para m\u00e1quinas locales, pero \u00bfqu\u00e9 sucede si supervisa servidores remotos? \u00bfPuedes ejecutar un local<\/em> gui\u00f3n en un remoto<\/em> \u00bfcomputadora? \u00a1S\u00ed!<\/p>\n

Conexiones remotas<\/h2>\n

La administraci\u00f3n remota del sistema generalmente implica hacer una conexi\u00f3n a la computadora remota a trav\u00e9s de un s<\/strong>ecure sh<\/strong>ella conexi\u00f3n. La conexi\u00f3n SSH le proporciona un s\u00edmbolo del sistema en la computadora remota. Luego puede continuar y realizar cualquier mantenimiento del sistema que sea necesario.<\/p>\n

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\u00f3n de l\u00ednea de comando.<\/p>\n

A medida que pasa el tiempo, modificar\u00e1 y mejorar\u00e1 sus scripts. Si tiene muchas m\u00e1quinas 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\u00ed misma y consume el ahorro de tiempo que se supone que ofrece el uso de scripts.<\/p>\n

La soluci\u00f3n ideal le permitir\u00eda mantener sus scripts en su m\u00e1quina local y ejecutarlos en las computadoras remotas a trav\u00e9s de la conexi\u00f3n SSH. Eso le brindar\u00eda una administraci\u00f3n simplificada con una colecci\u00f3n centralizada de secuencias de comandos, y la misma secuencia de comandos actualizada se ejecuta en todas las computadoras.<\/p>\n

Bash y SSH proporcionan una manera de hacer precisamente eso.<\/p>\n

Conexiones SSH sin contrase\u00f1a<\/h2>\n

La mejor manera de hacerlo es con conexiones sin contrase\u00f1a, 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\u00f1a cada vez.<\/p>\n

Aunque pueden resultar intimidantes para los usuarios primerizos, las claves SSH no son realmente dif\u00edciles. Son f\u00e1ciles de generar, simples de instalar en los servidores remotos y sin fricci\u00f3n cuando los usa con SSH. Los \u00fanicos requisitos previos son que las computadoras remotas tengan el demonio SSH sshd<\/code> en ejecuci\u00f3n y que tiene una cuenta de usuario en el equipo remoto.<\/p>\n

Si ya est\u00e1 realizando la administraci\u00f3n remota del sistema en ellos, ambos requisitos ya deben estar satisfechos.<\/p>\n

Para generar un par de claves SSH, escriba:<\/p>\n

ssh-keygen<\/pre>\n

Si tiene una cuenta llamada \u00abdave\u00bb en una computadora llamada \u00abfedora-36.local\u00bb, puede enviarle e instalar su clave p\u00fablica SSH con este comando:<\/p>\n

ssh-copy-id dave@fedora-36.local<\/pre>\n

Ahora, al realizar una conexi\u00f3n SSH de la forma habitual, se autenticar\u00e1 mediante las claves SSH. Se le coloca en un s\u00edmbolo del sistema en el servidor remoto sin que se le solicite una contrase\u00f1a.<\/p>\n

ssh dave@fedora-36.local<\/pre>\n

Ejecutar un script local de forma remota<\/h2>\n

Para estas pruebas, nuestro servidor remoto es una computadora Linux llamada \u201cfedora-36.local\u201d. Hemos configurado claves SSH y hemos probado nuestra conexi\u00f3n sin contrase\u00f1a al servidor remoto desde nuestra computadora local.<\/p>\n

Nuestro gui\u00f3n es muy simple. Escribe una marca de tiempo en un archivo llamado \u00abtimestamp.txt\u00bb, en el servidor remoto. Tenga en cuenta que el gui\u00f3n concluye con el comando de salida. Esto es importante, en algunos sistemas m\u00e1s antiguos es posible que un script se ejecute hasta el final, pero la conexi\u00f3n SSH se mantiene abierta.<\/p>\n

#!\/bin\/bash
\n
\ndate >> timestamp.txt
\n
\nexit 0<\/pre>\n

Copie este texto en un editor, gu\u00e1rdelo como \u00ablocal.sh\u00bb y luego use chmod<\/code> para hacerlo ejecutable.<\/p>\n

chmod +x local.sh<\/pre>\n

\"Usando<\/p>\n

En nuestra m\u00e1quina local, ejecutaremos el script de esta manera:<\/p>\n

ssh dave@fedora-36.local 'bash -s' < local.sh<\/pre>\n

\"lanzamiento<\/p>\n

As\u00ed es como funciona esto.<\/p>\n

    \n
  • ssh dave@fedora-36.local<\/strong>: La conexi\u00f3n SSH que estamos haciendo a la m\u00e1quina remota. Esto usa el ssh<\/code> comando, la cuenta de usuario preexistente en el servidor remoto y la direcci\u00f3n del servidor remoto.<\/li>\n
  • ‘bash-s’<\/strong>: Esto hace que Bash lea los comandos del flujo de entrada est\u00e1ndar. Permite que Bash lea la entrada redirigida o canalizada.<\/li>\n
  • < local.sh<\/strong>: Estamos redirigiendo el script a Bash.<\/li>\n<\/ul>\n

    Cuando se ejecuta el script, regresamos al s\u00edmbolo del sistema de la m\u00e1quina local. Saltando a nuestra m\u00e1quina remota, podemos usar cat para mirar dentro del archivo \u00abtimestamp.txt\u00bb.<\/p>\n

    cat timestamp.txt<\/pre>\n

    \"\"<\/p>\n

    Podemos ver la marca de tiempo de la \u00faltima conexi\u00f3n, y actualmente la \u00fanica. Ejecutar el script local varias veces m\u00e1s agrega las marcas de tiempo correspondientes al archivo remoto.<\/p>\n

    cat timestamp.txt<\/pre>\n

    \"\"<\/p>\n

    Por supuesto, en una situaci\u00f3n del mundo real, su gui\u00f3n har\u00eda algo m\u00e1s \u00fatil. Pero incluso nuestro ejemplo trivial demuestra que se est\u00e1 ejecutando un script local en un servidor remoto.<\/p>\n

    Pasando Argumentos al Script<\/h2>\n

    Puede pasar argumentos de l\u00ednea de comando al script. Modificaremos nuestro script para esperar tres par\u00e1metros de l\u00ednea de comando. Estos se redireccionan al archivo \u00abtimestamp.txt\u00bb junto con la marca de tiempo.<\/p>\n

    Guarde este script como \u00ablocal2.sh\u00bb y h\u00e1galo ejecutable con chmod<\/code>.<\/p>\n

    #!\/bin\/bash
\n
\necho \"$1 $2 $3\" >> timestamp.txt
\ndate >> timestamp.txt
\n
\nexit 0<\/pre>\n

    El comando que necesitamos usar es similar al ejemplo anterior, con algunos cambios.<\/p>\n

    ssh dave@fedora-36.local \"bash -s\" -- < local2.sh \"How-To Geek\" \"Linux\" \"Articles\"<\/pre>\n

    \"lanzar<\/p>\n

    El guion doble \u201c--<\/code>\u201d le dice a Bash que lo que sigue no debe ser considerado como par\u00e1metro de l\u00ednea de comando para el ssh<\/code> dominio. Los tres par\u00e1metros 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 \u00ab<\/code>\u201d para escapar del espacio en el par\u00e1metro \u201cHow-To Geek\u201d.<\/p>\n

    podemos consultar con cat<\/code> que nuestros par\u00e1metros fueron recibidos y manejados correctamente en el servidor remoto.<\/p>\n

    cat timestamp.txt<\/pre>\n

    \"Comprobaci\u00f3n<\/p>\n

    Ejecutar una secci\u00f3n de un script de forma remota<\/h2>\n

    Si tiene una secuencia de comandos que necesita realizar alg\u00fan procesamiento local para determinar qu\u00e9 acciones pueden ser necesarias en los servidores remotos, puede agregar una secci\u00f3n directamente en esa secuencia de comandos para realizar las acciones remotas por usted.<\/p>\n

    Podemos lograr esto usando aqu\u00ed documentos. Aqu\u00ed los documentos nos permiten redirigir l\u00edneas desde una secci\u00f3n etiquetada de un script a un comando. El procesamiento local se puede realizar por encima y por debajo del documento aqu\u00ed.<\/p>\n

    Este es el script \u00ablocal3.sh\u00bb, que contiene un documento aqu\u00ed.<\/p>\n

    #!\/bin\/bash
\n
\n# local processing can done here
\n
\n# remote processing is done here
\nssh -T dave@fedora-36.local << _remote_commands
\n
\n# commands to be run remotely would be added here
\ncd \/home\/dave\/Documents
\n# etc.
\n
\n# Finally, update the timestamp file
\necho \"Script3.sh:\" $(date) >> \/home\/dave\/timestamp.txt
\n
\n# this is the label that marks the end of the redirection
\n_remote_commands
\n
\n# more local processing can be done here
\n
\nexit 0<\/pre>\n

    estamos usando el ssh<\/code> comando con los mismos detalles de conexi\u00f3n que antes. Nos estamos conectando como usuario \u00abdave\u00bb en un servidor remoto llamado \u00abfedora-36.local\u00bb. Tambi\u00e9n estamos usando el -T<\/code> (deshabilitar asignaci\u00f3n de pseudo-terminal) opci\u00f3n. Esto evita que el servidor remoto proporcione un terminal interactivo para esta conexi\u00f3n.<\/p>\n

    La redirecci\u00f3n\u201d<<<\/code>\u201d va seguido del nombre de un etiqueta<\/em>. En este ejemplo, estamos usando \u00ab_remote_commands\u00bb. No hay nada especial en esta etiqueta, es simplemente una etiqueta.<\/p>\n

    Todos los comandos que aparecen en las l\u00edneas siguiendo<\/em> la redirecci\u00f3n se env\u00eda a trav\u00e9s de la conexi\u00f3n SSH. La redirecci\u00f3n se detiene cuando se encuentra la etiqueta. La ejecuci\u00f3n del script luego contin\u00faa con la l\u00ednea que sigue a la etiqueta.<\/p>\n

    Ejecutemos nuestro script de procesamiento mixto local\/remoto.<\/p>\n

    .\/local3.sh<\/pre>\n

    \"Lanzamiento<\/p>\n

    Como era de esperar, vemos una nueva entrada en el archivo \u00abtimestamp.txt\u00bb.<\/p>\n

    cat timestamp.txt<\/pre>\n

    \"\"<\/p>\n

    Ampl\u00ede su alcance<\/h2>\n

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

    RELACIONADO:<\/strong> C\u00f3mo administrar servidores Linux con la interfaz web de Cockpit<\/em><\/strong><\/p>\n<\/div>\n