Cómo ejecutar un script de shell local en un servidor SSH remoto

Share on facebook
Share on twitter
Share on linkedin
Share on telegram
Share on whatsapp

Contenidos

Bash Shell

El problema de ejecutar comandos a través de SSH es que, por lo general, debe escribirlos usted mismo o cargar un archivo de secuencia de comandos. A pesar de esto, con un poco de conocimiento de bash, puede pasar scripts completos a través de SSH sin tener el .sh archivo en la máquina remota.

La respuesta: pasar el script por encima de la entrada estándar

El comando SSH tiene un modo en el que puede ejecutar cualquier comando en un servidor remoto. Para ejecutar varios comandos, deberá usar el siguiente truco:

ssh user@remotehost 'bash -s' < script.sh

los bash -s comando significa «ejecutar los siguientes comandos en una nueva sesión de bash». los -s La bandera hace que se lea desde la entrada estándar, y la < script.sh bit leerá un archivo de script local en la entrada estándar.

El archivo se lee totalmente de forma local y todo se envía al servidor remoto sin cargar nada. Esto necesita que coloque todos los comandos en un archivo de secuencia de comandos separado.

Ejecución de muchos comandos remotos dentro de un script

Si, en cambio, desea ejecutar una parte de un script de shell en otro servidor, pero no todo, puede incluir bloques anidados como el siguiente en su script:

ssh user@remotehost 'bash -s' <<'ENDSSH'
  # The following commands run on the remote host
  echo "test"
  cd /home/
  pwd
ENDSSH

Esto funciona debido a que bash -s espera cualquier tipo de entrada estándar. los <<'ENDSSH' La directiva crea una estructura «aquí-documento», simplemente pasando todos los caracteres entre ella y la terminación «ENDSSH» a la entrada estándar y, por eso, al host remoto a través de SSH.

Hacerlo de esta manera significa que puede mantener todo en un archivo de secuencia de comandos, en lugar de crear uno nuevo para ejecutar en el control remoto.

Suscribite a nuestro Newsletter

No te enviaremos correo SPAM. Lo odiamos tanto como tú.