J'ai déjà un agent ssh configuré, et je peux exécuter des commandes sur un serveur externe en Bash script en faisant des choses comme :
ssh blah_server "ls; pwd;"
Maintenant, ce que j'aimerais vraiment faire, c'est exécuter un grand nombre de commandes longues sur un serveur externe. Le fait de mettre toutes ces commandes entre guillemets serait assez laid, et je préférerais vraiment éviter de me connecter plusieurs fois au serveur pour éviter cela.
Alors, y a-t-il un moyen de faire ça en une fois, entre parenthèses ou autre ? Je cherche quelque chose du genre :
ssh blah_server (
ls some_folder;
./someaction.sh;
pwd;
)
En fait, je me contenterai de n'importe quelle solution, pourvu qu'elle soit propre.
Editar
Pour clarifier, je parle du fait que cela fait partie d'un plus grand bash script. D'autres personnes pourraient avoir besoin de traiter le script plus tard, donc je voudrais le garder propre. Je ne veux pas avoir un script de bash avec une ligne qui ressemble à :
ssh blah_server "ls some_folder; ./someaction.sh 'some params'; pwd; ./some_other_action 'other params';"
parce qu'il est extrêmement laid et difficile à lire.
2 votes
Hmm, et si on mettait tout ça dans un script sur le serveur et qu'on l'appelait avec un seul
ssh
invocation ?1 votes
@Nikolai si les commandes dépendent du côté client, elles peuvent être écrites dans un shell script, puis
scp
,ssh
et exécutez. C'est la façon la plus propre, je pense.7 votes
Cela fait partie d'un plus grand bash script, donc je préfère ne pas le diviser avec la moitié vivant sur mon ordinateur personnel et l'autre moitié vivant sur le serveur et exécutée par ssh. Si possible, j'aimerais vraiment le garder comme un seul script exécuté depuis mon ordinateur personnel. N'y a-t-il vraiment aucun moyen propre d'encapsuler un ensemble de commandes dans un ssh ?
0 votes
Le mieux est de ne pas utiliser bash mais Perl, Python, Ruby, etc.
2 votes
Pourquoi voulez-vous éviter de mettre les commandes à distance entre guillemets ? Vous pouvez avoir des retours à la ligne à l'intérieur des guillemets, autant que vous le souhaitez ; et utiliser une chaîne au lieu de l'entrée standard signifie que l'entrée standard est disponible pour, par exemple, lire l'entrée du script distant. (Bien que sous Unix, les guillemets simples soient généralement à préférer aux guillemets doubles, sauf si vous avez spécifiquement besoin que le shell local évalue certaines parties de la chaîne).
0 votes
@khachik Voir l'autre réponse comment exécuter un script côté client sur le serveur. par exemple 'ssh remote-user>@<remote-host "bash -s" <./remote-commands.sh -- arg1 arg2'. (ce n'est pas la réponse à cette question qui demande comment le faire avec des commandes en ligne).