Come eseguire uno script di shell locale su un server SSH remoto

Contenuti

Bash Shell

Il problema con l'esecuzione di comandi tramite SSH è che, generalmente, devi scriverli tu stesso o caricare un file di script. Nonostante questo, con un po' di conoscenza, puoi passare interi script tramite SSH senza avere il .sh file sulla macchina remota.

La risposta: passa lo script su std.input

Il comando SSH ha una modalità in cui puoi eseguire qualsiasi comando su un server remoto. Per eseguire più comandi, dovrai usare il seguente trucco:

ssh utente@hostremoto 'bash -s' < script.sh

il bash -s comando significa “Eseguire i seguenti comandi in una nuova sessione BASH”. il -s Il flag lo fa leggere dallo standard input, e il < script.sh bit leggerà un file di script locale nell'input standard.

Il file viene letto completamente in locale e tutto viene inviato al server remoto senza caricare nulla. Ciò richiede di inserire tutti i comandi in un file di script separato.

Esecuzione di molti comandi remoti all'interno di uno script

e, Invece, vuoi eseguire una parte di uno script di shell su un altro server, ma non tutto, È possibile includere blocchi nidificati come il seguente nello script:

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

Questo funziona perché bash -s aspettatevi qualsiasi tipo di ingresso standard. il <<'ENDSSH' Il criterio crea una struttura “qui-documento”, semplicemente passando tutti i caratteri tra esso e la terminazione “ENDSSH” all'ingresso standard e, perché, all'host remoto tramite SSH.

Farlo in questo modo significa che puoi conservare tutto in un file di script, invece di crearne uno nuovo da eseguire sul telecomando.

Iscriviti alla nostra Newsletter

Non ti invieremo posta SPAM. Lo odiamo quanto te.