Automatisieren des Ausführungsbefehls unter Linux unter Windows mit PuTTY


69

Ich habe ein Szenario, in dem ich häufig einen Linux-Shell-Befehl (mit unterschiedlichen Dateinamen) unter Windows ausführen muss . Ich benutze dazu PuTTY und WinSCP (erfordert Anmeldenamen und Passwort). Die Datei wird über WinSCP in einen vordefinierten Ordner auf dem Linux-Computer kopiert und anschließend der Befehl von PuTTY ausgeführt. Gibt es eine Möglichkeit, dies durch ein Programm zu automatisieren? Im Idealfall möchte ich mit der rechten Maustaste auf die Datei in Windows klicken und den Befehl ausgeben, der die Datei auf den Remotecomputer kopiert und den vordefinierten Befehl (in PuTTy) mit dem Dateinamen als Argument ausführt.

Antworten:


33

Bei gängigen Methoden zur automatischen Anmeldung können Sicherheitsprobleme auftreten. Eine der einfachsten Möglichkeiten ist unten dokumentiert:

Und für den Teil, der den Befehl ausführt In der Putty-Benutzeroberfläche gibt es unter Verbindung> SSH> ein Feld für den Remote-Befehl.

4.17 Das SSH-Panel

Im SSH-Bereich können Sie Optionen konfigurieren, die nur für SSH-Sitzungen gelten.

4.17.1 Ausführen eines bestimmten Befehls auf dem Server

In SSH müssen Sie keine allgemeine Shell-Sitzung auf dem Server ausführen. Stattdessen können Sie einen einzelnen bestimmten Befehl ausführen (z. B. einen E-Mail-Benutzeragenten). Wenn Sie dies tun möchten, geben Sie den Befehl in das Feld "Remote-Befehl" ein. http://the.earth.li/~sgtatham/putty/0.53/htmldoc/Chapter4.html

Kurz gesagt, Ihre Antworten könnten genauso gut dem folgenden Text ähneln:


6
Ok, also kann ich verwenden putty.exe -ssh -2 -l username -pw password -m c:remote.cmd hostname. Vielen Dank. Jetzt muss ich den Befehl herausfinden, um die Datei zu kopieren und remote.cmd
Nemo

Die Links sind nicht mehr verfügbar
fazineroso

3
@fazineroso wofür hast du das abgelehnt? Du hättest einfach nett fragen können.
Gary Tsui

Die Befehlszeilenoptionen sind im PuTTY-Benutzerhandbuch dokumentiert, auf das Sie durch Klicken auf die Schaltfläche Hilfe in 3 Verwenden von PuTTY> 3.8 Die PuTTY-Befehlszeile> 3.8.3 Standardbefehlszeilenoptionen zugreifen können.
XP1

4
Ich habe abgestimmt, weil diese Antwort die gestellte Frage nicht beantwortet. Es sind ein paar Worte, dann ein Link, der die Frage nur irgendwie beantwortet. Es gibt hier andere Antworten, die drastisch kürzer sind und eine Antwort liefern.
Joseph Lennox

120

Putty wird normalerweise mit dem Dienstprogramm "plink" geliefert.
Dies ist im Wesentlichen der Befehlszeilenbefehl "ssh", der als Windows-EXE-Datei implementiert ist.
Es ist ziemlich gut im Kitt-Handbuch unter "Verwenden des Befehlszeilen-Tool-Plinks" dokumentiert.

Sie müssen nur einen Befehl wie folgt umbrechen:

plink root@myserver /etc/backups/do-backup.sh

in einem .bat-Skript.

Sie können auch allgemeine Shell-Konstrukte wie Semikolons verwenden, um mehrere Befehle auszuführen. z.B:

plink read@myhost ls -lrt /home/read/files;/etc/backups/do-backup.sh

5
Das ist die Antwort. Darüber hinaus können Sie einen Festzug verwenden, um das Laden und Verwenden des Schlüssels zu ermöglichen, sodass Sie nicht jedes Mal die Passphrase des Schlüssels eingeben müssen. Beachten Sie, dass aufgrund der Windows-Architektur nicht verhindert werden kann, dass der unverschlüsselte Schlüssel in eine Disk-Swap-Datei geschrieben wird. Sie können dieses Risiko verringern, indem Sie Ihren Schlüssel vom Festzug entfernen, wenn Sie wissen, dass er für eine Weile nicht verwendet wird.
DDay

2
plink -i file.ppk Benutzername @ Hostname Pfad / zu / Verzeichnis / Datei.sh, um ein Skript auf EC2 von Windows / Unix über die Befehlszeile auszuführen
Sailendra Pinupolu


4

Sie können eine Kitt-Sitzung erstellen und das Skript beim Starten der Sitzung automatisch auf den Server laden:

putty -load "sessionName" 

Zeigen Sie bei einem Remote-Befehl auf das Remote-Skript.


Was ist das Argument, um den Remote-Befehl pro Befehlszeile hinzuzufügen?
Radon8472

3

Sie können beide Aufgaben (das Hochladen und die Befehlsausführung) mit WinSCP ausführen. Verwenden Sie das WinSCP-Skript wie folgt:

option batch abort
option confirm off
open your_session
put %1%
call script.sh
exit

Referenz für den callBefehl:
https://winscp.net/eng/docs/scriptcommand_call

Referenz für die %1%Syntax:
https://winscp.net/eng/docs/scripting#syntax

Sie können das Skript dann wie folgt ausführen:

winscp.exe /console /script=script_path\upload.txt /parameter file_to_upload.dat

Tatsächlich können Sie eine Verknüpfung zu dem obigen Befehl im Menü " Senden an" des Windows Explorers einfügen , sodass Sie einfach mit der rechten Maustaste auf eine beliebige Datei klicken und mit WinSCP zu " Senden an"> "Hochladen" wechseln und den Remote-Befehl ausführen ausführen können (= Name der Verknüpfung) ).

Gehen Sie dazu in den Ordner %USERPROFILE%\SendTound erstellen Sie eine Verknüpfung mit dem folgenden Ziel:

winscp_path\winscp.exe /console /script=script_path\upload.txt /parameter %1

Siehe Erstellen eines Eintrags im Explorer-Menü "Senden an" .


Ich bin so froh, dass ich das gesehen habe, weil ich bereits Winscp in meinem Skript verwende und Kitt nervt
Michael St Clair

2

Hier ist eine völlig unkonventionelle Lösung.

  1. Installieren Sie AutoHotKey (ahk)
  2. Ordnen Sie das Skript einem Schlüssel zu (z. B. F9).
  3. Im ahk-Skript a) Ftp die Befehlsdatei (.ksh) an den Linux-Rechner

    b) Verwenden Sie Plink wie unten. Plink sollte installiert werden, wenn Sie Kitt haben.

plink Sitzungsname -l Benutzername -pw Passwort test.ksh

oder

plink -ssh example.com -l Benutzername -pw Passwort test.ksh

Alle Schritte werden nacheinander ausgeführt, wenn Sie in Windows F9 drücken.


(... vielleicht meinten Sie "über den Tellerrand hinaus denken" , da dies ein paar Schritte mehr als einer sind.) 😉
ashleedawg

2

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);
    }
}

}}

Beispielbefehle.txt:

ps

Link: https://huseyincakir.wordpress.com/2015/08/27/send-commands-to-a-remote-device-over-puttyssh-putty-send-command-from-command-line/


1

Probieren Sie MtPutty aus , Sie können die SSH-Anmeldung darin automatisieren. Es ist ein großartiges Tool, insbesondere wenn Sie sich mehrmals bei mehreren Servern anmelden müssen. Probieren Sie es hier aus

Ein weiteres Tool, das es wert ist, ausprobiert zu werden, ist TeraTerm . Es ist wirklich einfach für die SSH-Automatisierung zu verwenden. Sie können es hier bekommen . Aber mein Favorit ist immer MtPutty.


Hallo, meine Frage hier ist, dass ich die Skriptausführung ohne menschliches Eingreifen automatisieren muss, wie das geht. Ich benutze Selen.
Harsh Nigam

-1

Wenn Sie eine schlüsselbasierte Authentifizierung verwenden, scheint die Verwendung einer gespeicherten Putty-Sitzung hervorragend zu funktionieren, z. B. um ein Shell-Skript auf einem Remote-Server auszuführen (in meinem Fall ein ec2). Die gespeicherte Konfiguration übernimmt die Authentifizierung.

C: \ Users> plink saved_putty_session_name path_to_shell_file / filename.sh

Bitte denken Sie daran, dass dieser Befehl nicht funktioniert, wenn Sie Ihre Sitzung unter einem Namen wie (user @ hostname) speichern, da er als Teil des Remote-Befehls behandelt wird.


Die richtige Syntax zum Laden einer gespeicherten Sitzung (die mit jedem Site-Namen funktioniert) lautet plink -load name command- Wie bereits in der Antwort von @ lwpro2 gezeigt.
Martin Prikryl
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.