web-dev-qa-db-fra.com

Exécuter une commande à distance sur un serveur ssh avec un script

Je veux exécuter une commande sur un serveur ssh, mais cette commande est déterminée par un script sur ma machine locale. Comment je fais ça?

Un exemple pour plus de clarté:
Je veux écrire un script ici (foo.sh) qui prend un argument. Si je lance ./foo.sh 0, il devrait en quelque sorte envoyer un signal d'arrêt à la machine serveur, mais si je lance ./foo.sh 1, il devrait envoyer un signal de redémarrage.

Je sais comment me connecter manuellement via ssh et j'ai déjà configuré ssh-keys pour ignorer les mots de passe, mais je ne sais pas comment automatiser la procédure à l'aide d'un script.

6
Malabarba

Comme Oli l'a commenté, vous pouvez dire à SSH d'envoyer des commandes. Vous pouvez modifier votre script de sorte que si votre argument de ligne de commande est 1, il envoie ssh user@server "shutdown -h now". N'oubliez pas que vous devez être superutilisateur sur l'autre ordinateur pour l'éteindre.

EDIT: Au lieu d'utiliser root, comme suggéré dans les commentaires, mettez user dans le fichier sudoers pour pouvoir éteindre la machine sans mot de passe.

6
Nick Pascucci

Vous pouvez transmettre une commande (ou une liste de commandes, séparées par ;]) à une connexion SSH comme celle-ci:

ssh user@server-address "./foo 1"

Si vous avez un script local qui génère 0 ou 1, vous pouvez simplifier les choses:

ssh user@server-address "./foo `/path/to/your/script`"

Le code dans les backticks s'exécute avant toute chose et sa sortie est placée dynamiquement dans la ligne.

8
Oli