Utwórz plik wsadowy lub skrót do PuTTY (ssh), który otwiera sesję i uruchamia polecenie

10

Często otwieram sesję SSH, aby uruchomić to samo polecenie. Mam wszystko skonfigurowane do logowania bez podawania hasła (przez uwierzytelnianie oparte na kluczu SSH), więc zastanawiałem się, czy istnieje sposób na utworzenie skrótu lub pliku wsadowego w systemie Windows, który załadowałby PuTTY lub podobny program, a następnie odpalił polecenie (i prawdopodobnie zamknij, jeśli wynik jest dobry).

FreeSoftwareServers
źródło

Odpowiedzi:

14

Użyj wersji PuTTY z linii poleceń, plink.exeaby zainicjować połączenie SSH z wybranym hostem. Użyj -sshprzełącznika, aby połączyć się z SSH. Za pomocą -mprzełącznika możesz dołączyć plik poleceń:

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

Można pobrać plink.exez tutaj.

Ostatnim krokiem byłoby utworzenie skrótu zawierającego plink.exeżądane parametry.

Sprawdź w dokumentacji Plink inne parametry: dokumentacja Plink.exe

Smeerpijp
źródło
1
Nie ma potrzeby używania -mprzełącznika z Plink, ponieważ pozwala on określić polecenie bezpośrednio w wierszu poleceń, patrz moja odpowiedź .
Martin Prikryl,
-ssh host1user@host
Wybieram
@FreeSoftwareServers Pod tym względem nie ma różnicy w stosunku do PuTTY. Możesz zrobić plink site commandto samo, co w przypadku PuTTY (z wyjątkiem command). Plink i PuTTY ma w zasadzie ten sam zestaw opcji wiersza poleceń.
Martin Prikryl
8

Aby zautomatyzować wykonywanie polecenia, użyj Plink (z pakietu PuTTY) , a nie samego PuTTY.

Plink akceptuje polecenie w wierszu poleceń:

plink.exe user@host command

Jeśli chcesz nadal używać PuTTY, możesz użyć -mprzełącznika, aby określić plik poleceń (Plink obsługuje również -mprzełącznik).

Martin Prikryl
źródło
Kiedy powiedziałem, że nie mam hasła, powinienem był określić, że mam na myśli Auth oparte na kluczu SSH, ale pomyślałem, że tak będzie. Nie sądzę, żeby to działało tak, jak jest, wymagałoby dodania parametrów jak -i keylub-pw password
FreeSoftwareServers
@FreeSoftwareServers Pod tym względem nie ma różnicy w stosunku do PuTTY. Możesz zrobić plink site commandto samo, co w przypadku PuTTY (z wyjątkiem command). Plink i PuTTY ma w zasadzie ten sam zestaw opcji wiersza poleceń.
Martin Prikryl
twoja odpowiedź nie zawierała opcji korzystania z klucza SSH Auth aka PWDless login, podczas gdy istnieją poprawne flagi, znalazłem je na stronach podręcznika dla plink, które było zawarte w odpowiedzi MrPowerUsers, rozumiem, że oba mogą działać, ale użytkownicy MrPower odpowiedzą pasują do mojej lepiej
zadaj
6

Aby to osiągnąć, możesz użyć konfiguracji szpachli.

Załaduj kit i skonfiguruj sesję.

Wpisz tutaj zdalne polecenie, które chcesz uruchomić:

Kit zdalne pole poleceń

Następnie, zanim klikniesz „ Otwórz ”, wróć do karty „ Sesja ” (u góry) i zapisz konfigurację.

Teraz utwórz skrót do putty.exe, dodając -loadflagę, na przykład:

%PATH_TO_PUTTY%\putty.exe -load my_config

Teraz możesz po prostu kliknąć skrót, aby załadować sesję i wykonać polecenie.

Attie
źródło
Wygląda niesamowicie, zły test jutro, przypuszczam, że po prostu wykonam skrypt i może on zakończyć sesję na podstawie wyników skryptu
FreeSoftwareServers
Tak, sesja zakończy się po zakończeniu polecenia. Jeśli chcesz, aby PuTTY kręcił się po zakończeniu (np. W celu sprawdzenia wyjścia), ustaw „ Zamknij okno przy wyjściu ” w zakładce „ Sesja ”.
Attie
2

Jeśli używasz systemu Windows 10, być może zainteresuje Cię informacja, że ​​Microsoft ma podobno wersję beta OpenSSH (klient i serwer ):

[…] Przejdź do „Zarządzaj funkcjami opcjonalnymi”, a następnie + „Dodaj funkcję”. Następnie możesz przewinąć listę w dół i znaleźć funkcje klienta OpenSSH (Beta) i serwera OpenSSH (Beta) w systemie Windows. Pomysł uruchomienia innej zdalnej usługi w systemie Windows może być zniechęcający, więc nie obwiniamy cię, jeśli nie chcesz instalować serwera.

Po zainstalowaniu możesz po prostu odpalić swój wiersz poleceń i użyć klienta OpenSSH, wpisując ssh, a następnie polecenie takie jak ssh ubuntu@someIP.

Oto aktualny (według stanu na 28 listopada 2017 r.) sshPrzewodnik użytkowania poleceń, który otrzymujemy z klientem Windows OpenSSH:

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>

Jeśli to zadziała, powinieneś być w stanie korzystać sshtak jak na * Nix:

C:\WINDOWS\system32>ssh user@host "ls -l ~"
Michael - Where's Clay Shirky
źródło
To naprawdę fajne wiedzieć, ale uwielbiam SuperPuTTY. Będę też miał oko na Windows OpenSSH.
FreeSoftwareServers
Czy musisz mieć klienta ssh na komputerze, na którym się przesyłasz? Pytam, ponieważ niektóre z maszyn I nie są do zdalnego systemu Windows 10.
Nelda.techspiress
1
@ Nelda.techspiress powinny Trzeba tylko serwer uruchomiony na maszynach zalogować się do i potrzebują tylko klienta na maszynach logowaniu z. (Odpowiednio, jeśli zalogujesz się na jednej maszynie jako serwer proxy, aby wskoczyć na inną, ta środkowa maszyna będzie potrzebowała obu.)
Michael - Where's Clay Shirky
2

Pomyślałem, że wstawię skrypt, który mam nadzieję, aby zaoszczędzić kilka godzin pracy na składni i badaniach stron podręcznika

a) Plik SingleIP, IP Range lub IPList

b) nazwa skryptu do uruchomienia na adresie IP / zakresie (rzeczywisty skrypt typu sh / ksh unix)

c) opcjonalnie wykonaj skanowanie nmap dla otwartego portu 22 (tj. podsieci z niektórymi maszynami innymi niż Linux)

-Chce unikać adresów IP, z którymi nie można się połączyć, unikając możliwości dalszego poprawnego działania skryptu

d) opcjonalnie uruchom komendę pscp, aby automatycznie buforować klucz hosta (putty nie robi tego automatycznie)

Ta partia zakłada:

1. masz pełny pakiet PuTTY i klucz SSH zainstalowany w C: \ Program Files \ PuTTY \

2. pliki wsadowe / skrypty / IPlist zainstalowane w C: \ Program Files \ PuTTY \ scripts \

3. Katalogi robocze NMAP i PuTTY znajdują się w ścieżce poleceń

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

Jest to szczególnie przydatne w przypadku posiadania jednego skryptu (takiego jak aktualizacja certyfikatu SSL) na wielu komputerach

Oto kompletny plik wsadowy:

@ECHO WYŁ

rem Musisz zmodyfikować sekcję CACHEKEY i SCRIPT, aby odzwierciedlić lokalizację klucza SSH

ustaw IPFILE = IPList_temp.txt
ustaw runagain = n
ustaw OPCJĘ = 1
ustaw ZAKRES =
ustaw IP =
ustaw SCAN = n
ustaw KEYCACHE = n

:OPCJA
CLS
ECHO (katalog roboczy jest ustawiony na C: \ Program Files \ PuTTY \ scripts \)
ECHO. 
ECHO 1. Pojedyncze IP
ECHO 2. Plik listy IP
ECHO 3. Zakres IP
ECHO.
set / p OPTION = "Wybierz typ IP:"
JEŚLI% OPCJI% == 3 GOTO IPRANGE
JEŚLI% OPCJI% == 2 GOTO IPLIST
JEŚLI% OPCJI% == 1 GOTO SINGLEIP
echo Wybierz prawidłową opcję
OPCJA GOTO

:ZAKRES IP
ECHO Wprowadź zakresy adresów IP, jak w poniższym przykładzie. Użyj spacji między wieloma zakresami:
ECHO, tj. „10.21.0.15–99 10.21.1.15–100”
set / p RANGE = Wprowadź zakres: 
echo% ZAKRES%>% IPFILE%
GOTO SCRIPTNAME

: SINGLEIP
set / p IP = Wprowadź adres IP:
echo% IP%>% IPFILE%
GOTO SCRIPTNAME

: IPLIST
set / p IP = Wprowadź nazwę pliku IPList:
kopiuj / Y% IP%% IPFILE%
GOTO SCRIPTNAME

: SCRIPTNAME
set / p SCRIPT = Wpisz nazwę skryptu:
jeśli nie istnieje% SCRIPT% (
nazwa pliku echa nie istnieje!
GOTO SCRIPTNAME)

ECHO.
set / p SCAN = Czy najpierw skanuje Nmap? (Zalecana):
jeśli% SCAN% == n GOTO: RUNCACHE

rem Sprawdź, czy typ IP to „zakres”, ponieważ nmap nie może odczytać zakresu IP z pliku i należy wpisać bezpośrednio w poleceniu nmap
JEŚLI% OPCJI% == 3 GOTO NMAPRANGE 
: NMAP
echo Skanowanie adresów IP dla portu 22 otwarte ...
nmap --open -n -p22 -iL% IPFILE% -oG - | findstr / E Up> nmap_temp.txt
GOTO AFTERNMAP

: NMAPRANGE
echo Skanowanie adresów IP dla portu 22 otwarte ...
nmap --open -n -p22% ZAKRES% -oG - | findstr / E Up> nmap_temp.txt

: AFTERNMAP
echo GOTOWE
formatowanie rem nmap jest nieprawidłowe, poniższe usuwa dodatkowe informacje
dla / f "tokenów = 2" %% A w (nmap_temp.txt) wykonaj echo %% A >> nmap_temp2.txt
rem usuwa ukryte miejsce na końcu adresu IP (wymaga „repl” znajduje się w katalogu plików wsadowych)
wpisz „nmap_temp2.txt” | repl "" "">% IPFILE%

: RUNCACHE
set / p KEYCACHE = Skanuj i buforuj klucz SSH (t / n)?
jeśli% KEYCACHE% == n GOTO SCRIPT

: CACHEKEY
rem Uruchom wszystkie adresy IP, aby buforować klucz hosta SSH, jeśli jeszcze nie jest buforowany
for / F "tokens = *" %% A in (% IPFILE%) do (echo y | "C: \ Program Files \ PuTTY \ pscp.exe" -l root -i "C: \ Program Files \ PuTTY \ SSH .ppk "-touch %% A: / tmp / test)

:SCENARIUSZ
dla / F "tokenów = 1" %% A w (% IPFILE%) do ("C: \ Program Files \ PuTTY \ putty.exe" -ssh %% A -t -l root -i "C: \ Program Files \ PuTTY \ SSH.ppk "-m" C: \ Program Files \ PuTTY \ scripts \% SCRIPT% ")
jeśli istnieją nmap_temp.txt (del nmap_temp.txt)
jeśli istnieją nmap_temp2.txt (del nmap_temp2.txt)
set / p runagain = "Naciśnij Enter, aby zakończyć lub y, aby uruchomić ponownie"
jeśli% runagain% == y OPCJA GOTO
Todd Porter
źródło
1
Odrzucane są tylko odpowiedzi na odsyłacz, co się stanie, jeśli Twoja strona nie działa? Jeśli chcesz przyczynić się, udostępnij skrypt tutaj. Zapraszamy do opublikowania źródła / linku do witryny wraz z kodem tutaj, ale odpowiedzi powinny być samodzielne i nie wymagać poniższych linków.
FreeSoftwareServers
1
zawartość partii wklejono
Todd Porter
Nie „autocache” klucza hosta. Weryfikacja klucza hosta jest integralną częścią zabezpieczania sesji SSH. PuTTY (i jego narzędzia) nie pytają o klucz hosta dla zabawy lub nękania. Ma powód! + Nie powinieneś również przechowywać danych użytkownika ( SSH.ppki ) to folderu Skrypt Program Files`.
Martin Prikryl
czy możesz polecić, jak uruchomić skrypt bez wielu adresów IP? a) nie jest to przeznaczone dla typowego pulpitu użytkownika, bardziej dla serwera administracyjnego, na którym bezpieczeństwo jest większe, kto ma dostęp do serwera b) jakie dokładnie jest ryzyko bezpieczeństwa? Buforowanie klucza hosta jest opcjonalne i powinno być wykonywane tylko raz w całym zakresie. Jeśli uruchomisz skrypt ponownie bez buforowania klucza, nadal zobaczysz zmiany klucza hosta i skrypt nie będzie kontynuowany ...
Todd Porter
...... W zgodzie na klucz ty. Wskazuję folder udostępniony na naszym serwerze NAS, na którym znajduje się folder udostępniony, do którego tylko ja mam dostęp. Właśnie wybrałem ścieżkę, ponieważ inni użytkownicy będą inni
Todd Porter
1

Możesz także spojrzeć na oprogramowanie takie jak mRemoteNG, MOBAxTerm lub SecureCRT, które będzie zarządzać Twoimi połączeniami SSH za Ciebie, to również łączy się z zapisanymi sesjami PuTTY, dzięki czemu możesz zastosować szablon do sesji.

Gubbiny
źródło
0

To jest ostatnie „CMD”, które mogę po prostu zapisać na serwerze plików i utworzyć skrót na pulpicie.

::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
FreeSoftwareServers
źródło