J'ai un scénario où j'ai besoin d'exécuter a commande shell linux fréquemment (avec des noms de fichiers différents) à partir de Windows. J'utilise PuTTY et WinSCP pour ce faire (nécessite un nom d'utilisateur et un mot de passe). Le fichier est copié dans un dossier prédéfini de la machine Linux via WinSCP, puis la commande est exécutée à partir de PuTTY. Y at-il un moyen par lequel je peux automatiser cela par le biais d'un programme. Idéalement, je voudrais faire un clic droit sur le fichier depuis Windows et lancer la commande qui copiera le fichier sur une machine distante et exécutera la commande prédéfinie (dans PuTTY) avec le nom de fichier en argument.
Il pourrait y avoir des problèmes de sécurité avec les méthodes courantes de connexion automatique. Une des manières les plus simples est documentée ci-dessous:
Et comme pour la partie, il exécute la commande Dans PuTTY UI, Connexion> SSH> il existe un champ pour la commande à distance.
4.17 Le panneau SSH
Le panneau SSH vous permet de configurer des options qui ne s'appliquent qu'aux sessions SSH.
4.17.1 Exécuter une commande spécifique sur le serveur
En SSH, vous n'avez pas besoin d'exécuter une session Shell générale sur le serveur. Au lieu de cela, vous pouvez choisir d'exécuter une seule commande spécifique (telle qu'un agent d'utilisateur de messagerie, par exemple). Si vous voulez faire cela, entrez la commande dans la case "Commande à distance". http://the.earth.li/~sgtatham/PuTTY/0.53/htmldoc/Chapter4.html
en bref, vos réponses pourraient tout aussi bien ressembler au texte ci-dessous:
PuTTY généralement vient avec l'utilitaire "plink".
Il s'agit essentiellement de la commande de ligne de commande "ssh" implémentée en tant que fichier Windows .exe.
C’est assez bien documenté dans le manuel de PuTTY sous "Utiliser l’outil de ligne de commande plink".
Vous devez juste envelopper une commande comme:
plink root@myserver /etc/backups/do-backup.sh
dans un script .bat.
Vous pouvez également utiliser des constructions Shell communes, comme des points-virgules, pour exécuter plusieurs commandes. par exemple:
plink read@myhost ls -lrt /home/read/files;/etc/backups/do-backup.sh
Vous pouvez écrire un script TCL et établir une session SSH sur cette machine Linux et émettre des commandes automatiquement. Vérifiez http://wiki.tcl.tk/11542 pour un court tutoriel.
Vous pouvez créer une session PuTTY et charger automatiquement le script sur le serveur lors du démarrage de la session:
PuTTY -load "sessionName"
Sur commande distante, pointez sur le script distant.
Vous pouvez effectuer les deux tâches (le téléchargement et l'exécution de la commande) à l'aide de WinSCP. Utilisez le script WinSCP comme suit:
option batch abort
option confirm off
open your_session
put %1%
call script.sh
exit
Référence de la commande call
:
https://winscp.net/fr/docs/scriptcommand_call
Référence pour le %1%
syntaxe:
https://winscp.net/fr/docs/scripting#syntax
Vous pouvez ensuite exécuter le script comme suit:
winscp.exe /console /script=script_path\upload.txt /parameter file_to_upload.dat
En fait, vous pouvez mettre un raccourci vers la commande ci-dessus dans le menu Envoyer vers de l'explorateur Windows, de sorte que vous puissiez ensuite cliquer avec le bouton droit de la souris sur n'importe quel fichier et accéder au Envoyer à> Téléchargez avec WinSCP et Execute Remote Command (= nom du raccourci).
Pour cela, allez dans le dossier %USERPROFILE%\SendTo
et créez un raccourci avec la cible suivante:
winscp_path\winscp.exe /console /script=script_path\upload.txt /parameter %1
Voir Création d'une entrée dans le menu "Envoyer à" de l'explorateur .
Code:
using System;
using System.Diagnostics;
namespace playSound
{
class Program
{
public static void Main(string[] args)
{
Console.WriteLine(args[0]);
Process amixerMediaProcess = new Process();
amixerMediaProcess.StartInfo.CreateNoWindow = false;
amixerMediaProcess.StartInfo.UseShellExecute = false;
amixerMediaProcess.StartInfo.ErrorDialog = false;
amixerMediaProcess.StartInfo.RedirectStandardOutput = false;
amixerMediaProcess.StartInfo.RedirectStandardInput = false;
amixerMediaProcess.StartInfo.RedirectStandardError = false;
amixerMediaProcess.EnableRaisingEvents = true;
amixerMediaProcess.StartInfo.Arguments = string.Format("{0}","-ssh username@"+args[0]+" -pw password -m commands.txt");
amixerMediaProcess.StartInfo.FileName = "plink.exe";
amixerMediaProcess.Start();
Console.Write("Presskey to continue . . . ");
Console.ReadKey(true);
}
}
}
Exemple de commandes.txt:
ps
Essayez MtPutty , vous pouvez automatiser la connexion SSH en elle. C'est un excellent outil, surtout si vous devez vous connecter plusieurs fois à plusieurs serveurs. Essayez-le ici
Un autre outil qui vaut la peine d’être essayé est TeraTerm . C'est vraiment facile à utiliser pour l'automatisation SSH. Vous pouvez l'obtenir ici . Mais mon préféré est toujours MtPutty.
Voici une solution totalement prête à l'emploi.
Dans le script ahk, a) Ftp le fichier de commandes (.ksh) sur la machine Linux
b) Utilisez plink comme ci-dessous. Plink doit être installé si vous avez PuTTY.
plink sessionname -l nom d'utilisateur -pw mot de passe test.ksh
ou
plink -ssh exemple.com -l nom d'utilisateur -pw mot de passe test.ksh
Toutes les étapes seront effectuées en séquence chaque fois que vous appuierez sur F9 dans Windows.
Si vous utilisez une authentification basée sur une clé, utiliser une session PuTTY enregistrée semble bien fonctionner, par exemple pour exécuter un script Shell sur un serveur distant (dans mon cas, un ec2). La configuration enregistrée se chargera de l'authentification.
C:\Utilisateurs> plink saved_PuTTY_session_nom path_to_fichier_shell/filename.sh
Rappelez-vous que si vous enregistrez votre session sous un nom tel que (utilisateur @ nomhôte), cette commande ne fonctionnera pas car elle sera traitée comme faisant partie de la commande distante.