Recherche de site Web

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


Le problème avec l'exécution de commandes via SSH est qu'en général, vous devez soit les taper vous-même, soit télécharger un fichier script. Cependant, avec un peu de connaissances en bash, vous pouvez passer des scripts entiers via SSH sans avoir à le faire.

.sh

fichier sur la machine distante.

La solution : passer le script par l'entrée standard

La commande SSH a un mode où vous pouvez exécuter une seule 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." Le drapeau -s permet de lire à partir de l'entrée standard, et le morceau < script.sh lira un fichier script local dans l'entrée standard.

Le fichier est entièrement lu localement, et tout est envoyé au serveur distant sans télécharger quoi que ce soit. Cela nécessite de mettre toutes les commandes dans un fichier script séparé.

Exécution de nombreuses commandes distantes dans un script

Si vous souhaitez plutôt exécuter une partie d'un script shell sur un autre serveur, mais pas l'ensemble, vous pouvez inclure des blocs imbriqués comme ceux-ci 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 attend tout type d'entrée standard. La directive <<'ENDSSH' crée une structure de "here-document", passant essentiellement tous les caractères entre elle et la fin "ENDSSH" à l'entrée standard, et donc à l'hôte distant via SSH.

Faire cela de cette manière signifie que vous pouvez tout garder dans un seul fichier de script, plutôt que de créer un nouveau fichier pour l'exécuter à distance.