Comment exécuter un script shell local sur un serveur SSH distant

Contenu

Bash Shell

Le problème avec l'exécution de commandes via SSH est que, en général, vous devez les écrire vous-même ou télécharger un fichier de script. Malgré cela, avec un peu de connaissances, vous pouvez passer des scripts entiers via SSH sans avoir le .sh fichier sur la machine distante.

La réponse: passer le script sur std.input

La commande SSH a un mode où vous pouvez exécuter n'importe quelle commande sur un serveur distant. Pour exécuter plusieurs commandes, vous devrez utiliser l'astuce suivante:

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

Les bash -s commande signifie “exécuter les commandes suivantes dans une nouvelle session bash”. Les -s Le drapeau le fait lire à partir de l'entrée standard, et la < script.sh bit lira un fichier de script local sur l'entrée standard.

le fichier est lu entièrement localement et tout est envoyé au serveur distant sans rien télécharger. cela nécessite que vous placiez toutes les commandes dans un fichier de script distinct.

Exécution de nombreuses commandes distantes dans un script

Et, en échange, vous souhaitez exécuter une partie d’un script shell sur un autre serveur, mais pas tout, vous pouvez inclure des blocs imbriqués comme suit dans votre script:

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

Cela fonctionne parce que bash -s attendez-vous à n'importe quel type d'entrée standard. Les <<'ENDSSH' La stratégie crée une structure “ici-document”, il suffit de passer tous les caractères entre elle et la terminaison “ENDSSH” à l’entrée standard et, pour cela, à l'hôte distant via SSH.

Faire de cette façon signifie que vous pouvez tout conserver dans un seul fichier de script, au lieu d'en créer un nouveau à exécuter sur la télécommande.

Abonnez-vous à notre newsletter

Nous ne vous enverrons pas de courrier SPAM. Nous le détestons autant que vous.