web-dev-qa-db-fra.com

Meilleure façon de scripter des commandes SSH distantes en batch (Windows)

Je cherche à scripter quelque chose en batch qui devra exécuter des commandes ssh distantes sous Linux. Je voudrais que la sortie soit renvoyée pour que je puisse l'afficher à l'écran ou la consigner.

J'ai essayé PuTTY.exe -ssh user@Host -pw password -m command_run mais il ne renvoie rien sur mon écran.

Quelqu'un a fait ça avant?

18
leeman24

Le commutateur -m de PuTTY prend un chemin dans un fichier de script en tant qu'argument, et non comme une commande .

Référence: https://the.earth.li/~sgtatham/PuTTY/latest/htmldoc/Chapter3.html#using-cmdline-m

Vous devez donc enregistrer votre commande (command_run) dans un fichier texte brut (par exemple, c:\path\command.txt) et la transmettre à PuTTY:

PuTTY.exe -ssh user@Host -pw password -m c:\path\command.txt

Notez cependant que vous devez utiliser Plink (un outil de connexion en ligne de commande de la suite PuTTY). C'est une application console, vous pouvez donc rediriger sa sortie vers un fichier (ce que vous ne pouvez pas faire avec PuTTY).

Une syntaxe de ligne de commande est identique, une redirection de sortie a été ajoutée:

plink.exe -ssh user@Host -pw password -m c:\path\command.txt > output.txt

Voir Utilisation de l'outil de connexion de ligne de commande Plink .

Et avec Plink, vous pouvez réellement fournir la commande directement sur sa ligne de commande:

plink.exe -ssh user@Host -pw password command > output.txt

Questions similaires:
Automatisation de la commande en cours d’exécution sous Linux à partir de Windows avec PuTTY
Exécution d'une commande dans Plink à partir d'un fichier de commandes

31
Martin Prikryl

Vous pouvez également utiliser Bash on Ubuntu on Windows directement. Par exemple.,

bash -c "ssh -t user@computer 'cd /; Sudo my-command'"

Commentaire de Martin Prikryl ci-dessous:

Le -t permet l'émulation de terminal. Si vous avez besoin de l'émulation de terminal pour Sudo dépend de la configuration (et par défaut, vous n'en avez pas besoin, alors que de nombreuses distributions remplacent la valeur par défaut). Au contraire, de nombreuses autres commandes nécessitent une émulation de terminal.

2
Jon49

Vous pouvez également installer OpenSSH http://www.mls-software.com/opensshd.html puis simplement ssh user@Host -pw password -m command_run

Edit: Après une réponse de user2687375 lors de l’installation, sélectionnez uniquement le client. Une fois que cela est fait, vous devriez pouvoir lancer SSH à partir d'une commande.

Ensuite, vous pouvez créer un script de lot ssh tel que

ECHO OFF
CLS
:MENU
ECHO.
ECHO ........................
ECHO SSH servers
ECHO ........................
ECHO.
ECHO 1 - Web Server 1
ECHO 2 - Web Server 2
ECHO E - EXIT
ECHO.

SET /P M=Type 1 - 2 then press ENTER:
IF %M%==1 GOTO WEB1
IF %M%==2 GOTO WEB2
IF %M%==E GOTO EOF

REM ------------------------------
REM SSH Server details
REM ------------------------------

:WEB1
CLS
call ssh [email protected]
cmd /k

:WEB2
CLS
call ssh [email protected]
cmd /k
1
campervancoder