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
-m
switch mit Plink zu verwenden, da der Befehl direkt in der Befehlszeile angegeben werden kann (siehe meine Antwort) .