Creare un file batch o un collegamento a PuTTY (ssh) che apre una sessione ed esegue un comando


10

Mi ritrovo spesso ad aprire una sessione SSH per eseguire lo stesso singolo comando. Ho tutto configurato per accedere senza inserire una password (tramite autenticazione basata su chiave SSH), quindi mi chiedevo se ci fosse un modo per creare un collegamento o un file batch in Windows che potesse caricare PuTTY o un programma simile, quindi spegnerlo comando (e probabilmente uscire se il risultato è buono).

Risposte:


14

Utilizzare la versione PuTTY della riga di comando plink.exeper avviare una connessione SSH a un host di scelta. Utilizzare l' -sshinterruttore per connettersi con SSH. Con l' -mopzione è possibile includere un file di comando:

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

Puoi scaricare plink.exeda qui.

L'ultimo passo sarebbe quello di creare un collegamento anche plink.execon i parametri desiderati.

Consulta la documentazione di Plink per altri vari parametri: la documentazione di Plink.exe


1
Non è necessario utilizzare -mswitch con Plink, poiché consente di specificare il comando direttamente sulla sua riga di comando, vedere la mia risposta .
Martin Prikryl,

Sto scegliendo questa risposta, come preferisco usare, -ssh host1che si riferisce a Putty Profile vsuser@host
FreeSoftwareServers

@FreeSoftwareServers Non c'è alcuna differenza con PuTTY al riguardo. Puoi fare plink site commandallo stesso modo di PuTTY (tranne che per command). Plink e PuTTY ha sostanzialmente lo stesso set di opzioni da riga di comando.
Martin Prikryl,

8

Per automatizzare l'esecuzione di un comando, utilizzare Plink (dal pacchetto PuTTY) , non PuTTY stesso.

Plink accetta un comando sulla sua riga di comando:

plink.exe user@host command

Se vuoi continuare a usare PuTTY, puoi usare -mswitch per specificare un file di comando (Plink supporta anche l' -mopzione).


Quando ho detto che non avevo una password, avrei dovuto specificare che intendevo con Auth basato su chiave SSH, ma ho pensato che sarebbe stato assunto. Non penso che funzionerebbe così com'è, avrebbe bisogno di parametri aggiunti su like -i keyo-pw password
FreeSoftwareServers il

@FreeSoftwareServers Non c'è alcuna differenza con PuTTY al riguardo. Puoi fare plink site commandallo stesso modo di PuTTY (tranne che per command). Plink e PuTTY ha sostanzialmente lo stesso set di opzioni da riga di comando.
Martin Prikryl il

la tua risposta non includeva le opzioni per usare Auth basato su chiave SSH aka login PWDless, mentre esistono i flag corretti, li ho trovati nelle pagine man per il plink che era incluso nella risposta MrPowerUsers, capisco che entrambi potrebbero funzionare ma gli utenti MrPower rispondono perfettamente al mio mettere in discussione meglio e collegare anche le pagine man
FreeSoftwareServers il

6

È possibile utilizzare le configurazioni di stucco per raggiungere questo obiettivo.

Carica stucco e configura la tua sessione.

Immettere il comando remoto che si desidera eseguire qui:

Box di comando remoto Putty

Quindi, prima di fare clic su " Apri ", torna alla scheda " Sessione " (in alto) e salva la configurazione.

Ora, crea un collegamento a putty.exe, aggiungendo il -loadflag, ad esempio:

%PATH_TO_PUTTY%\putty.exe -load my_config

Ora, puoi semplicemente fare clic sul collegamento e caricherà la sessione, eseguendo il comando.


Sembra fantastico, test male domani, suppongo che eseguirò solo uno script e che può terminare la sessione in base ai risultati dello script
FreeSoftwareServers

Sì, la sessione terminerà quando termina il comando. Se desideri che PuTTY rimanga in giro una volta fatto (ad esempio: per ispezionare l'output), imposta " Chiudi finestra all'uscita " nella scheda " Sessione ".
Attie

2

Se si utilizza Windows 10, si potrebbe essere interessati a sapere che Microsoft secondo come riferito ha un beta di OpenSSH (client e il server ):

[…] Vai su “Gestisci funzionalità opzionali” quindi + “Aggiungi una funzionalità”. È quindi possibile scorrere l'elenco verso il basso e trovare le funzionalità Client OpenSSH (Beta) e Server OpenSSH (Beta) in Windows. L'idea di eseguire un altro servizio remoto su Windows può essere scoraggiante, quindi non ti biasimiamo se non vuoi installare il server.

Una volta installato, è possibile semplicemente avviare la riga di comando e utilizzare il client OpenSSH digitando ssh seguito da un comando come ssh ubuntu@someIP.

Ecco l'attuale sshguida all'uso del comando (al 28 novembre 2017) che stiamo ottenendo con il client OpenSSH di Windows:

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>

Se funziona, dovresti essere in grado di usare sshcome faresti su un * Nix:

C:\WINDOWS\system32>ssh user@host "ls -l ~"

È davvero bello da sapere, ma adoro SuperPuTTY. Terrò d'occhio anche OpenSSH di Windows.
FreeSoftwareServers il

Devi avere il client ssh sulla macchina in cui stai remotando? Lo chiedo perché alcune delle macchine in cui mi trovo a distanza non sono Windows 10.
Nelda.techspiress

1
@ Nelda.techspiress Dovrebbe essere necessaria al server in esecuzione su macchine che si accede ad e solo bisogno il cliente sulle macchine si accede da. (Di conseguenza, se accedi a una macchina come proxy per saltare su un'altra, quella macchina centrale avrà bisogno di entrambe.)
Michael - Dov'è Clay Shirky il

2

Ho solo pensato di inserire la sceneggiatura che ho realizzato per salvare alcune persone ore di sintassi e ricerche sulla pagina man

a) File SingleIP, IP Range o IPList

b) nome dello script da eseguire sull'IP / intervallo (script di tipo sh / ksh unix effettivo)

c) opzionalmente eseguire nmap scan per la porta 22 aperta (ovvero sottorete con alcune macchine non Linux)

-Vuoi evitare IP a cui Putty non può connettersi, evitando che gli script possano continuare correttamente

d) facoltativamente esegui il comando pscp per memorizzare automaticamente la chiave host (putty non lo fa automaticamente)

Questo batch presuppone:

1. hai il pacchetto completo PuTTY e la chiave SSH installati in C: \ Programmi \ PuTTY \

2. file batch / script / elenco IP installati in C: \ Programmi \ PuTTY \ scripts \

3. Le directory di lavoro NMAP e PuTTY si trovano nel percorso del comando

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

Ciò è utile soprattutto per avere un singolo script (come l'aggiornamento di un certificato SSL) su una vasta gamma di macchine

Ecco il file batch completo:

@ECHO OFF

rem È necessario modificare la sezione CACHEKEY e SCRIPT per riflettere la posizione della chiave SSH

set IPFILE = IPList_temp.txt
set runagain = n
impostare OPZIONE = 1
imposta RANGE =
imposta IP =
imposta SCAN = n
impostare KEYCACHE = n

:OPZIONE
CLS
ECHO (la directory di lavoro è impostata su C: \ Programmi \ PuTTY \ scripts \)
ECO. 
ECHO 1. IP singolo
ECHO 2. File dell'elenco IP
ECHO 3. Intervallo IP
ECO.
set / p OPTION = "Scegli il tipo di IP:"
SE% OPZIONE% == 3 GOTO IPRANGE
SE% OPZIONE% == 2 GOTO IPLIST
IF% OPTION% == 1 GOTO SINGLEIP
echo Seleziona un'opzione valida
OPZIONE GOTO

: IPRange
ECHO Immettere gli intervalli IP come nell'esempio seguente. Utilizzare uno spazio tra più intervalli:
ECHO cioè "10.21.0.15-99 10.21.1.15-100"
set / p RANGE = Inserisci intervallo: 
echo% RANGE%>% IPFILE%
GOTO SCRIPTNAME

: SINGLEIP
set / p IP = Inserisci IP:
echo% IP%>% IPFILE%
GOTO SCRIPTNAME

: elenco IPList
set / p IP = Inserisci il nome file dell'elenco indirizzi IP:
copia / Y% IP%% IPFILE%
GOTO SCRIPTNAME

: SCRIPTNAME
set / p SCRIPT = Inserisci il nome dello script:
se non esiste% SCRIPT% (
il nome file echo non esiste!
GOTO SCRIPTNAME)

ECO.
set / p SCAN = Nmap esegue prima la scansione? (consigliato):
se% SCAN% == n GOTO: RUNCACHE

rem Controlla se il tipo IP è "range" poiché nmap non può leggere un intervallo IP dal file e deve essere digitato direttamente nel comando nmap
SE% OPZIONE% == 3 GOTO NMAPRANGE 
: NMAP
echo Scansione IP per porta 22 aperta ...
nmap --open -n -p22 -iL% IPFILE% -oG - | findstr / E Su> nmap_temp.txt
GOTO AFTERNMAP

: NMAPRANGE
echo Scansione IP per porta 22 aperta ...
nmap --open -n -p22% RANGE% -oG - | findstr / E Su> nmap_temp.txt

: AFTERNMAP
eco FATTO
La formattazione rem nmap non è corretta, quanto segue rimuove le informazioni extra
per / f "tokens = 2" %% A in (nmap_temp.txt) esegui l'eco %% A >> nmap_temp2.txt
rem rimuove lo spazio nascosto alla fine dell'IP (richiede che "repl" sia nella directory del file batch)
digitare "nmap_temp2.txt" | sostitu "" "">% IPFILE%

: RUNCACHE
set / p KEYCACHE = Scansiona e memorizza nella cache la chiave SSH (y / n)?
se% KEYCACHE% == n GOTO SCRIPT

: CACHEKEY
rem Esegui tutti gli IP per memorizzare nella cache la chiave host SSH se non è già stata memorizzata nella cache
per / F "token = *" %% A in (% IPFILE%) do (echo y | "C: \ Programmi \ PuTTY \ pscp.exe" -l root -i "C: \ Programmi \ PuTTY \ SSH .ppk "-touch %% A: / tmp / test)

: SCRIPT
per / F "token = 1" %% A in (% IPFILE%) do ("C: \ Programmi \ PuTTY \ putty.exe" -ssh %% A -t -l root -i "C: \ Programmi \ PuTTY \ SSH.ppk "-m" C: \ Programmi \ PuTTY \ scripts \% SCRIPT% ")
se esiste nmap_temp.txt (del nmap_temp.txt)
se esiste nmap_temp2.txt (del nmap_temp2.txt)
set / p runagain = "Premi Invio per finire o y per rieseguire"
se% runagain% == y GOTO OPTION

1
Link solo le risposte sono disapprovate, cosa succede se il tuo sito non funziona? Se vuoi contribuire, condividi lo script qui. Ti invitiamo a pubblicare una fonte / link al sito insieme al codice qui, ma le risposte dovrebbero essere autonome e non richiedere i seguenti link.
FreeSoftwareServers

1
contenuto batch incollato
Todd Porter

Non "autocache" una chiave host. La verifica della chiave host è parte integrante della protezione della sessione SSH. PuTTY (e i suoi strumenti) non ti chiedono la chiave host per divertimento o per molestarti. Ha una ragione! + Inoltre non dovresti archiviare i dati dell'utente ( SSH.ppke la ) to cartella Script Programmi).
Martin Prikryl

puoi consigliarmi come eseguire uno script su più IP senza di esso? a) questo non è pensato per un tipico desktop utente, più per un server di amministrazione in cui la sicurezza è maggiore che ha accesso al server b) qual è esattamente il rischio per la sicurezza? La memorizzazione nella cache della chiave host è facoltativa e deve essere eseguita una sola volta nell'intervallo. Se esegui di nuovo lo script senza memorizzare nella cache la chiave, visualizzerai comunque le modifiche della chiave host e lo script non continuerà su ...
Todd Porter,

...... In accordo con la chiave tu. Indico una cartella condivisa sul nostro NAS in cui risiede la cartella condivisa, a cui solo io ho accesso. Ho appena scelto un percorso poiché gli altri utenti saranno diversi
Todd Porter,

1

Puoi anche guardare software come mRemoteNG, MOBAxTerm o SecureCRT che gestiranno le tue connessioni SSH per te, questo si collega anche alle sessioni PuTTY salvate in modo da poter applicare un modello alla sessione.


0

Questo è il "CMD" finale che posso semplicemente salvare sul mio FileServer e creare un collegamento sul mio desktop.

::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
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.