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

0
1128

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

La solution : passer Le script sur l'entrée standard

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 le hack suivant :

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

La commande bash -s signifie “exécuter les commandes suivantes dans une nouvelle session bash.” L'indicateur -s le fait lire à partir de l'entrée standard, et le < script.sh bit lira un fichier de script local dans 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 mettiez toutes les commandes dans un fichier de script séparé.

Exécuter de nombreuses commandes à distance dans un script

Si vous à la place, vous voulez exécuter une partie d'un script shell sur un autre serveur, mais pas la totalité, vous pouvez inclure des blocs imbriqués comme suit dans votre script :

ssh user@remotehost 'bash -s' <<' ENDSSH' # Les commandes suivantes s'exécutent sur l'hôte distant echo “test” cd /home/pwd ENDSSH Advertisement

Cela fonctionne car bash -s attend tout type d'entrée standard. La directive <<'ENDSSH' crée un “document ici” structure, en passant essentiellement tous les caractères entre elle et la fin “ENDSSH” à l'entrée standard, et donc à l'hôte distant via SSH.

En procédant ainsi, vous pouvez tout conserver dans un seul fichier de script, plutôt que d'en créer un nouveau à exécuter sur la télécommande.