Erstellen Sie eine Batchdatei oder eine Verknüpfung zu PuTTY (ssh), die eine Sitzung öffnet und einen Befehl ausführt

10

Ich öffne oft eine SSH-Sitzung, um denselben Befehl auszuführen. Ich habe alles eingerichtet, um mich anzumelden, ohne ein Passwort einzugeben (über SSH Key-Based Auth). Daher habe ich mich gefragt, ob es eine Möglichkeit gibt, eine Verknüpfung oder eine Batchdatei in Windows zu erstellen, die PuTTY oder ein ähnliches Programm lädt, und diese dann auszulösen Befehl (und wahrscheinlich beenden, wenn das Ergebnis gut ist).

FreeSoftwareServer
quelle

Antworten:

14

Verwenden Sie die PuTTY- plink.exeBefehlszeilenversion, um eine SSH-Verbindung zu einem Host Ihrer Wahl herzustellen. Verwenden Sie den -sshSwitch, um eine Verbindung mit SSH herzustellen. Mit dem -mSchalter können Sie eine Befehlsdatei einfügen:

plink.exe -ssh host1 -m C:\path\to\commands.txt

Sie können plink.exevon hier herunterladen .

Der letzte Schritt wäre, eine Verknüpfung plink.exemit den gewünschten Parametern zu erstellen .

Weitere Parameter finden Sie in der Plink-Dokumentation: Plink.exe-Dokumentation

Smeerpijp
quelle
1
Es ist nicht erforderlich, -mswitch mit Plink zu verwenden, da der Befehl direkt in der Befehlszeile angegeben werden kann (siehe meine Antwort) .
Martin Prikryl
Ich wähle diese Antwort, da ich es vorziehe, sie zu verwenden, -ssh host1die sich auf user@host
Kittprofil
@FreeSoftwareServers In dieser Hinsicht gibt es keinen Unterschied zu PuTTY. Sie können plink site commandgenauso vorgehen wie mit PuTTY (außer command). Plink und PuTTY haben im Grunde die gleichen Befehlszeilenoptionen.
Martin Prikryl
8

Verwenden Sie zum Automatisieren der Befehlsausführung Plink (aus dem PuTTY-Paket) und nicht PuTTY.

Plink akzeptiert einen Befehl in seiner Befehlszeile:

plink.exe user@host command

Wenn Sie PuTTY weiterhin verwenden möchten, können Sie mit -mswitch eine Befehlsdatei angeben (Plink unterstützt den -mSwitch ebenfalls).

Martin Prikryl
quelle
Als ich sagte, ich hätte kein Passwort, hätte ich angeben sollen, dass ich mit SSH Key-based Auth gemeint bin, aber ich dachte, es würde angenommen. Ich denke nicht, dass dies so funktionieren würde, wie es ist, es würde Parameter erfordern, die auf like -i keyoder-pw password
FreeSoftwareServers
@FreeSoftwareServers In dieser Hinsicht gibt es keinen Unterschied zu PuTTY. Sie können plink site commandgenauso vorgehen wie mit PuTTY (außer command). Plink und PuTTY haben im Grunde die gleichen Befehlszeilenoptionen.
Martin Prikryl
Ihre Antwort enthielt nicht die Optionen zur Verwendung von SSH Key Based Auth, auch bekannt als PWDless-Login. Obwohl die richtigen Flags vorhanden sind, habe ich sie in den Manpages für Plink gefunden, die in der Antwort von MrPowerUsers enthalten waren. Ich verstehe, dass beide funktionieren könnten, aber die Antwort von MrPower-Benutzern passt zu meiner Frage besser und verlinkte auch die Manpages
FreeSoftwareServers
6

Sie können Kittkonfigurationen verwenden, um dies zu erreichen.

Laden Sie Putty und konfigurieren Sie Ihre Sitzung.

Geben Sie hier den Remote-Befehl ein, den Sie ausführen möchten:

Putty Remote-Befehlsbox

Bevor Sie auf " Öffnen " klicken , kehren Sie zur Registerkarte " Sitzung " (oben) zurück und speichern Sie Ihre Konfiguration.

Erstellen Sie nun eine Verknüpfung zu putty.exeund fügen Sie das -loadFlag hinzu, zum Beispiel:

%PATH_TO_PUTTY%\putty.exe -load my_config

Jetzt können Sie einfach auf die Verknüpfung klicken und sie lädt Ihre Sitzung und führt Ihren Befehl aus.

Attie
quelle
Sieht fantastisch aus, ich werde morgen einen schlechten Test durchführen. Ich nehme an, ich werde nur ein Skript ausführen und es kann die Sitzung basierend auf den Ergebnissen des Skripts
beenden
Ja, die Sitzung wird beendet, wenn der Befehl beendet wird. Wenn Sie möchten, dass PuTTY einmal fertig ist (z. B. um die Ausgabe zu überprüfen), stellen Sie auf der Registerkarte " Sitzung " die Option " Fenster beim Beenden schließen " ein .
Attie
2

Wenn Sie Windows 10 verwenden, könnte es Sie interessieren, dass Microsoft angeblich eine Beta von OpenSSH (Client und Server ) hat:

[…] Gehen Sie zu „Optionale Funktionen verwalten“ und dann zu „Funktion hinzufügen“. Anschließend können Sie in der Liste nach unten scrollen und die Funktionen OpenSSH Client (Beta) und OpenSSH Server (Beta) in Windows suchen. Die Idee, einen anderen Remotedienst unter Windows auszuführen, kann entmutigend sein, sodass wir Ihnen keine Vorwürfe machen, wenn Sie den Server nicht installieren möchten.

Nach der Installation können Sie einfach Ihre Befehlszeile starten und den OpenSSH-Client verwenden, indem Sie ssh gefolgt von dem Befehl wie z ssh ubuntu@someIP.

Hier ist die aktuelle (Stand: 28. November 2017) sshBefehlsverwendungsanleitung, die wir mit dem Windows OpenSSH-Client erhalten:

C:\WINDOWS\system32>ssh
usage: ssh [-46AaCfGgKkMNnqsTtVvXxYy] [-b bind_address] [-c cipher_spec]
           [-D [bind_address:]port] [-E log_file] [-e escape_char]
           [-F configfile] [-I pkcs11] [-i identity_file]
           [-J [user@]host[:port]] [-L address] [-l login_name] [-m mac_spec]
           [-O ctl_cmd] [-o option] [-p port] [-Q query_option] [-R address]
           [-S ctl_path] [-W host:port] [-w local_tun[:remote_tun]]
           [user@]hostname [command]
C:\WINDOWS\system32>

Wenn dies funktioniert, sollten Sie in der Lage sein, sshwie auf einem * Nix zu verwenden:

C:\WINDOWS\system32>ssh user@host "ls -l ~"
Michael - Wo ist Clay Shirky?
quelle
Das ist wirklich cool zu wissen, aber ich liebe SuperPuTTY. Ich werde auch Windows OpenSSH im Auge behalten.
FreeSoftwareServers
Müssen Sie den SSH-Client auf dem Computer haben, auf dem Sie ein Remoting durchführen? Ich frage, weil einige der Maschinen, auf die ich remote bin, nicht Windows 10 sind.
Nelda.techspiress
1
@ Nelda.techspiress Sie sollten den Server nur auf Computern ausführen müssen, auf denen Sie sich anmelden , und den Client nur auf Computern, auf denen Sie sich anmelden . (Entsprechend, wenn Sie sich bei einem Computer als Proxy anmelden, um in einen anderen zu
Michael - Wo ist Clay Shirky
2

Ich dachte nur, ich würde das Skript einfügen, das ich erstellt habe, um hoffentlich einigen Leuten Stunden an Syntax und Manpage-Recherche zu ersparen

a) SingleIP-, IP Range- oder IPList-Datei

b) Skriptname, der auf der IP / dem Bereich ausgeführt werden soll (aktuelles Unix-Skript vom Typ sh / ksh)

c) Führen Sie optional einen nmap-Scan nach offenem Port 22 durch (dh Subnetz mit einigen Nicht-Linux-Computern).

-wollen Sie IPs vermeiden, mit denen Putty keine Verbindung herstellen kann, um zu vermeiden, dass das Skript ordnungsgemäß fortgesetzt werden kann

d) Führen Sie optional den Befehl pscp aus, um den Hostschlüssel automatisch zwischenzuspeichern (Putty führt dies nicht automatisch aus).

Diese Charge setzt voraus:

1. Sie haben das vollständige PuTTY-Paket und den SSH-Schlüssel in C: \ Programme \ PuTTY \ installiert

2. Batch- / Skript- / IPlistendateien, die unter C: \ Programme \ PuTTY \ scripts \ installiert sind

3. Die Arbeitsverzeichnisse NMAP und PuTTY befinden sich in Ihrem Befehlspfad

https://www.harmonyhit.com/PuttyBatch.bat

Dies ist vor allem dann nützlich, wenn ein einzelnes Skript (z. B. das Aktualisieren eines SSL-Zertifikats) auf einer Reihe von Computern vorhanden ist

Hier ist die vollständige Batch-Datei:

@ ECHO AUS

rem Sie müssen den Abschnitt CACHEKEY und SCRIPT ändern, um die Position Ihres SSH-Schlüssels widerzuspiegeln

setze IPFILE = IPList_temp.txt
setze runagain = n
setze OPTION = 1
setze RANGE =
setze IP =
setze SCAN = n
setze KEYCACHE = n

:MÖGLICHKEIT
CLS
ECHO (Arbeitsverzeichnis ist auf C: \ Programme \ PuTTY \ scripts \ eingestellt)
ECHO. 
ECHO 1. Einzelne IP
ECHO 2. IP-Listendatei
ECHO 3. IP-Bereich
ECHO.
set / p OPTION = "IP-Typ auswählen:"
IF% OPTION% == 3 GOTO IPRANGE
IF% OPTION% == 2 GOTO IPLIST
IF% OPTION% == 1 GOTO SINGLEIP
echo Bitte wählen Sie eine gültige Option
GOTO OPTION

:IP-BEREICH
ECHO Geben Sie die IP-Bereiche wie im folgenden Beispiel ein. Verwenden Sie ein Leerzeichen zwischen mehreren Bereichen:
ECHO dh "10.21.0.15-99 10.21.1.15-100"
set / p RANGE = Bereich eingeben: 
echo% RANGE%>% IPFILE%
GOTO SCRIPTNAME

: SINGLEIP
set / p IP = IP eingeben:
Echo% IP%>% IPFILE%
GOTO SCRIPTNAME

: IPLIST
set / p IP = IPList-Dateiname eingeben:
Kopie / Y% IP %% IPFILE%
GOTO SCRIPTNAME

: SCRIPTNAME
set / p SCRIPT = Skriptname eingeben:
falls nicht vorhanden% SCRIPT% (
Echo Dateiname existiert nicht!
GOTO SCRIPTNAME)

ECHO.
set / p SCAN = Nmap zuerst scannen? (empfohlen):
if% SCAN% == n GOTO: RUNCACHE

rem Überprüfen Sie, ob der IP-Typ "Bereich" ist, da nmap einen IP-Bereich nicht aus einer Datei lesen kann und direkt in den Befehl nmap eingegeben werden muss
IF% OPTION% == 3 GOTO NMAPRANGE 
: NMAP
Echo Scannen von IPs für Port 22 offen ...
nmap --open -n -p22 -iL% IPFILE% -oG - | findstr / E Up> nmap_temp.txt
GOTO AFTERNMAP

: NMAPRANGE
Echo Scannen von IPs für Port 22 offen ...
nmap --open -n -p22% RANGE% -oG - | findstr / E Up> nmap_temp.txt

: AFTERNMAP
Echo FERTIG
Die rem nmap-Formatierung ist nicht korrekt. Im Folgenden werden zusätzliche Informationen entfernt
für / f "tokens = 2" %% A in (nmap_temp.txt) wird %% A >> nmap_temp2.txt wiedergegeben
rem versteckten Speicherplatz am Ende der IP entfernen (erfordert "repl" im Batch-Dateiverzeichnis)
Geben Sie "nmap_temp2.txt" | ein repl "" "">% IPFILE%

: RUNCACHE
set / p KEYCACHE = SSH-Schlüssel scannen und zwischenspeichern (j / n)?
if% KEYCACHE% == n GOTO SCRIPT

: CACHEKEY
rem Führen Sie alle IPs durch, um den SSH-Hostschlüssel zwischenzuspeichern, falls er nicht bereits zwischengespeichert ist
für / F "tokens = *" %% A in (% IPFILE%) do (echo y | "C: \ Programme \ PuTTY \ pscp.exe" -l root -i "C: \ Programme \ PuTTY \ SSH .ppk "-touch %% A: / tmp / test)

:SKRIPT
für / F "Token = 1" %% A in (% IPFILE%) do ("C: \ Programme \ PuTTY \ putty.exe" -ssh %% A -t -l root -i "C: \ Programme \ PuTTY \ SSH.ppk "-m" C: \ Programme \ PuTTY \ scripts \% SCRIPT% ")
falls vorhanden nmap_temp.txt (del nmap_temp.txt)
falls vorhanden nmap_temp2.txt (del nmap_temp2.txt)
set / p runagain = "Drücken Sie die Eingabetaste, um den Vorgang abzuschließen, oder y, um ihn erneut auszuführen."
if% runagain% == y GOTO OPTION
Todd Porter
quelle
1
Nur Link-Antworten sind verpönt. Was passiert, wenn Ihre Website ausfällt? Wenn Sie einen Beitrag leisten möchten, teilen Sie das Skript bitte hier. Sie können hier gerne eine Quelle / einen Link zur Website zusammen mit dem Code veröffentlichen. Die Antworten sollten jedoch in sich geschlossen sein und keine folgenden Links erfordern.
FreeSoftwareServers
1
Chargeninhalt eingefügt
Todd Porter
Host-Schlüssel nicht automatisch zwischenspeichern . Die Überprüfung des Hostschlüssels ist ein wesentlicher Bestandteil der Sicherung Ihrer SSH-Sitzung. PuTTY (und seine Tools) fragen Sie nicht zum Spaß oder zur Belästigung nach dem Host-Schlüssel. Es hat einen Grund! + Sie sollten auch keine Benutzerdaten ( SSH.ppkund den ) to Ordner " Script Program Files") speichern.
Martin Prikryl
Können Sie empfehlen, ein Skript über mehrere IP-Adressen ohne dieses Skript auszuführen? a) Dies ist nicht für einen typischen Benutzer-Desktop gedacht, sondern eher für einen Admin-Server, bei dem die Sicherheit höher ist und der Zugriff auf den Server hat. b) Was genau ist das Sicherheitsrisiko? Das Zwischenspeichern des Hostschlüssels ist optional und sollte nur einmal im gesamten Bereich durchgeführt werden. Wenn Sie das Skript erneut ausführen, ohne den Schlüssel zwischenzuspeichern, werden weiterhin Schlüsseländerungen
Todd Porter
...... In Übereinstimmung mit dem Schlüssel du. Ich zeige auf einen freigegebenen Ordner auf unserem NAS, in dem sich der freigegebene Ordner befindet, auf den nur ich Zugriff habe. Ich habe gerade einen Pfad ausgewählt, da andere Benutzer anders sein werden
Todd Porter
1

Sie können sich auch Software wie mRemoteNG, MOBAxTerm oder SecureCRT ansehen, die Ihre SSH-Verbindungen für Sie verwaltet. Dies ist auch mit den gespeicherten PuTTY-Sitzungen verknüpft, sodass Sie eine Vorlage auf die Sitzung anwenden können.

Gubbins
quelle
0

Dies ist die endgültige "CMD", die ich einfach auf meinem FileServer speichern und eine Verknüpfung auf meinem Desktop erstellen kann.

::FreeSoftwareServers
::Automated Opening of SSH Tunnel & Execute CMD on Remote Host
::/superuser/1278434/create-a-batch-file-or-shortcut-to-putty-ssh-that-opens-a-session-and-runs-a-c

set puttydir="C:\Program Files\PuTTY"
set exe=plink.exe
::Profile must exist in PuTTY
set remotehost=FileServer
set remotecmd="chmod 777 /mnt/mdadm/torrents -R"

cd %puttydir% 

%exe% %remotehost% %remotecmd%

::Test First Manually in CMD Prompt
::Note Remote Host does NOT have access to BashRC Alias's
::start "C:\Program Files\PuTTY\" plink.exe -ssh FileServer touch /tmp/testfile
::start "C:\Program Files\PuTTY\" plink.exe -ssh FileServer ~/script.sh
FreeSoftwareServer
quelle