Buat file batch atau pintasan ke Putty (ssh) yang membuka sesi dan menjalankan perintah

10

Saya sering menemukan diri saya membuka sesi SSH untuk menjalankan perintah tunggal yang sama. Saya memiliki semua pengaturan untuk masuk tanpa memasukkan kata sandi (Via SSH Key-Based Auth), jadi saya bertanya-tanya apakah ada cara untuk membuat pintasan atau file batch di Windows yang akan memuat Putty atau program serupa, lalu jalankan perintah (dan kemungkinan keluar jika hasilnya baik).

FreeSoftwareServers
sumber

Jawaban:

14

Gunakan versi baris perintah Putty plink.exeuntuk menginisiasi koneksi SSH ke sejumlah pilihan. Gunakan -sshsakelar untuk terhubung dengan SSH. Dengan -msakelar Anda dapat menyertakan file perintah:

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

Anda dapat mengunduh plink.exedari sini.

Langkah terakhir adalah membuat pintasan termasuk plink.exedengan parameter yang diinginkan.

Lihat dokumentasi Plink untuk berbagai parameter lain: Dokumentasi Plink.exe

Smeerpijp
sumber
1
Tidak perlu menggunakan -msakelar dengan Plink, karena memungkinkan untuk menentukan perintah secara langsung pada baris perintahnya, lihat jawaban saya .
Martin Prikryl
Saya memilih jawaban ini karena saya lebih suka menggunakan -ssh host1yang berkaitan dengan Profil dempul vsuser@host
FreeSoftwareServers
@FreeSoftwareServers Tidak ada perbedaan dengan Putty dalam hal ini. Anda dapat melakukan plink site commandhal yang sama seperti dengan Putty (kecuali untuk command). Plink dan Putty pada dasarnya memiliki serangkaian opsi baris perintah yang sama.
Martin Prikryl
8

Untuk mengotomatiskan eksekusi perintah, gunakan Plink (dari paket Putty) , bukan Putty itu sendiri.

Plink menerima perintah di baris perintahnya:

plink.exe user@host command

Jika Anda ingin tetap menggunakan Putty, Anda dapat menggunakan -msakelar untuk menentukan file perintah (Plink juga mendukung -msakelar itu).

Martin Prikryl
sumber
Ketika saya mengatakan saya tidak memiliki kata sandi, saya seharusnya menentukan maksud saya dengan SSH Auth berbasis Auth, tapi saya pikir itu akan dianggap. Saya tidak berpikir ini akan berfungsi seperti itu, itu akan memerlukan parameter ditambahkan pada suka -i keyatau-pw password
FreeSoftwareServers
@FreeSoftwareServers Tidak ada perbedaan dengan Putty dalam hal ini. Anda dapat melakukan plink site commandhal yang sama seperti dengan Putty (kecuali untuk command). Plink dan Putty pada dasarnya memiliki serangkaian opsi baris perintah yang sama.
Martin Prikryl
jawaban Anda tidak termasuk opsi untuk menggunakan SSH Auth Berbasis Berbasis alias login PWDless, sementara flag yang benar ada, saya menemukan mereka di halaman manual untuk plink yang termasuk dalam jawaban MrPowerUsers, saya mengerti keduanya bisa bekerja tetapi jawaban pengguna MrPower cocok dengan saya pertanyaan yang lebih baik dan menautkan halaman manual juga
FreeSoftwareServers
6

Anda dapat menggunakan konfigurasi dempul untuk mencapai ini.

Muat dempul dan konfigurasikan sesi Anda.

Masukkan perintah jarak jauh yang ingin Anda jalankan di sini:

Kotak perintah jarak jauh dempul

Kemudian, sebelum mengklik " Buka ", kembali ke tab " Sesi " (di bagian atas), dan simpan konfigurasi Anda.

Sekarang, buat jalan pintas ke putty.exe, tambahkan -loadbendera, misalnya:

%PATH_TO_PUTTY%\putty.exe -load my_config

Sekarang, Anda bisa mengklik pintasan dan itu akan memuat sesi Anda, menjalankan perintah Anda.

Attie
sumber
Tampak luar biasa, ujian sakit besok, saya kira saya hanya akan menjalankan skrip dan dapat mengakhiri sesi berdasarkan hasil skrip
FreeSoftwareServers
Ya, sesi akan berakhir ketika perintah berakhir. Jika Anda ingin Putty tetap berkeliaran setelah selesai (misalnya: untuk memeriksa output), kemudian atur " Tutup jendela saat keluar " di tab " Sesi ".
Attie
2

Jika Anda menggunakan Windows 10, Anda mungkin tertarik untuk mengetahui bahwa Microsoft dilaporkan memiliki beta OpenSSH (klien dan server ):

[...] buka "Kelola Fitur Opsional" lalu + "Tambahkan fitur". Anda kemudian dapat menggulir ke bawah daftar dan menemukan fitur OpenSSH Client (Beta) dan OpenSSH Server (Beta) di Windows. Gagasan menjalankan layanan jarak jauh lain di Windows dapat menjadi sesuatu yang membingungkan sehingga kami tidak menyalahkan Anda jika Anda tidak ingin menginstal server.

Setelah terinstal, Anda cukup menjalankan baris perintah dan menggunakan klien OpenSSH dengan mengetikkan ssh diikuti oleh perintah seperti ssh ubuntu@someIP.

Berikut ini adalah sshpanduan penggunaan perintah (per 28 November 2017) saat ini yang kami peroleh dengan Klien 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>

Jika ini berhasil, Anda harus dapat menggunakan sshseperti pada * Nix:

C:\WINDOWS\system32>ssh user@host "ls -l ~"
Michael - Dimana Clay Shirky
sumber
Itu sangat keren untuk diketahui, tapi saya suka SuperPuTTY. Saya akan mengawasi Windows OpenSSH juga.
FreeSoftwareServers
Apakah Anda perlu memiliki klien ssh pada mesin yang Anda remoting? Saya bertanya karena beberapa mesin yang saya gunakan bukan Windows 10.
Nelda.techspiress
1
@ Nelda.techspiress Anda hanya perlu server yang berjalan pada mesin Anda login ke dan hanya perlu klien pada mesin Anda login dari. (Sejalan dengan itu, jika Anda masuk ke satu mesin sebagai proxy untuk melompat ke yang lain, mesin tengah itu akan membutuhkan keduanya.)
Michael - Di mana Clay Shirky
2

Hanya berpikir saya akan memasukkan skrip yang saya buat semoga menghemat beberapa jam sintaksis dan penelitian halaman manual

a) File SingleIP, IP Range, atau IPList

b) nama skrip untuk dijalankan pada IP / range (skrip jenis unix sh / ksh yang sebenarnya)

c) secara opsional melakukan nmap memindai port 22 terbuka (yaitu subnet dengan beberapa mesin non-Linux)

-Ingin menghindari dempul IP tidak dapat terhubung, menghindari skrip yang dapat dilanjutkan dengan benar

d) secara opsional menjalankan perintah pscp untuk melakukan autocache kunci host (dempul tidak melakukan ini secara otomatis)

Batch ini mengasumsikan:

1. Anda memiliki paket Putty lengkap dan kunci SSH diinstal di C: \ Program Files \ Putty \

2. file batch / skrip / IPlist diinstal di C: \ Program Files \ PuTTY \ scripts \

3. Direktori kerja NMAP dan Putty ada di jalur perintah Anda

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

Ini sebagian besar berguna untuk memiliki satu skrip (seperti memperbarui sertifikat SSL) di berbagai mesin

Ini file batch lengkap:

@ECHO MATI

rem Anda harus memodifikasi bagian CACHEKEY dan SCRIPT untuk mencerminkan lokasi kunci SSH Anda

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

:PILIHAN
CLS
ECHO (Direktori kerja diatur ke C: \ Program Files \ PuTTY \ scripts \)
GEMA. 
ECHO 1. IP tunggal
ECHO 2. File daftar IP
ECHO 3. Rentang IP
GEMA.
set / p OPTION = "Pilih jenis IP:"
JIKA% OPTION% == 3 GOTO IPRANGE
JIKA% OPTION% == 2 GOTO IPLIST
JIKA% OPSI% == 1 GOTO SINGLEIP
echo Silakan pilih opsi yang valid
PILIHAN GOTO

: IPRANGE
ECHO Masukkan rentang IP seperti pada contoh berikut. Gunakan ruang antara beberapa rentang:
ECHO yaitu "10.21.0.15-99 10.21.1.15-100"
set / p RANGE = Masukkan Rentang: 
echo% RANGE%>% IPFILE%
GOTO SCRIPTNAME

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

: IPLIST
set / p IP = Masukkan nama file IPList:
copy / Y% IP%% IPFILE%
GOTO SCRIPTNAME

: SCRIPTNAME
set / p SCRIPT = Masukkan nama skrip:
jika tidak ada% SCRIPT% (
nama file gema tidak ada!
GOTO SCRIPTNAME)

GEMA.
set / p SCAN = Apakah Nmap memindai terlebih dahulu? (disarankan):
jika% SCAN% == n GOTO: RUNCACHE

rem Periksa apakah tipe IP adalah "range" karena nmap tidak dapat membaca rentang IP dari file dan harus mengetik langsung dalam perintah nmap
JIKA% OPSI% == 3 GOTO NMAPRANGE 
: NMAP
echo Memindai IP untuk port 22 terbuka ...
nmap --open -n -p22 -iL% IPFILE% -oG - | findstr / E Up> nmap_temp.txt
GOTO AFTERNMAP

: NMAPRANGE
echo Memindai IP untuk port 22 terbuka ...
nmap - buka -n -p22% RANGE% -oG - | findstr / E Up> nmap_temp.txt

: AFTERNMAP
echo DONE
memformat rem nmap tidak benar, berikut ini menghapus info tambahan
untuk / f "token = 2" %% A in (nmap_temp.txt) lakukan echo %% A >> nmap_temp2.txt
rem menghapus ruang tersembunyi di akhir IP (membutuhkan "repl" berada di direktori file batch)
ketik "nmap_temp2.txt" | tambahkan "" "">% IPFILE%

: RUNCACHE
set / p KEYCACHE = Pindai dan simpan kunci SSH (y / n)?
jika% KEYCACHE% == n GOTO SCRIPT

: CACHEKEY
rem Jalankan melalui semua IP untuk melakukan cache Kunci Host SSH jika belum di-cache
untuk / F "token = *" %% A dalam (% IPFILE%) lakukan (echo y | "C: \ Program Files \ PuTTY \ pscp.exe" -l root -i "C: \ Program Files \ PuTTY \ SSH .ppk "-touch %% A: / tmp / test)

:NASKAH
untuk / F "token = 1" %% A in (% 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% ")
jika ada nmap_temp.txt (del nmap_temp.txt)
jika ada nmap_temp2.txt (del nmap_temp2.txt)
set / p runagain = "Tekan Enter untuk Menyelesaikan atau y untuk menjalankan kembali"
jika% runagain% == y PILIHAN GOTO
Todd Porter
sumber
1
Tautan hanya jawaban yang disukai, bagaimana jika situs Anda turun? Jika Anda ingin berkontribusi, silakan bagikan skrip di sini. Selamat datang untuk memposting sumber / tautan ke situs beserta kode di sini, tetapi jawabannya harus lengkap dan tidak memerlukan tautan berikut.
FreeSoftwareServers
1
isi bets ditempelkan
Todd Porter
Jangan "autocache" kunci host. Memverifikasi kunci host adalah bagian integral dari pengamanan sesi SSH Anda. Putty (dan alat-alatnya) tidak meminta Anda untuk kunci host untuk bersenang-senang atau untuk melecehkan Anda. Itu punya alasan! + Anda juga tidak boleh menyimpan data pengguna ( SSH.ppkdan ) to folder skrip Program Files`.
Martin Prikryl
dapatkah Anda merekomendasikan cara menjalankan skrip di beberapa IP tanpa itu? a) ini tidak dimaksudkan untuk desktop pengguna biasa, lebih untuk server admin di mana keamanan lebih banyak yang memiliki akses ke server b) apa sebenarnya risiko keamanan itu? Caching kunci host adalah opsional dan hanya dilakukan sekali melintasi rentang. Jika Anda menjalankan skrip lagi tanpa kunci caching, Anda masih akan melihat dan meng-host perubahan kunci dan skrip tidak akan melanjutkan ...
Todd Porter
...... Setuju pada kunci kamu. Saya menunjuk ke folder bersama di NAS kami di mana folder bersama itu tinggal, yang hanya dapat saya akses. Saya baru saja memilih jalur karena pengguna lain akan berbeda
Todd Porter
1

Anda juga dapat melihat perangkat lunak seperti mRemoteNG, MOBAxTerm atau SecureCRT yang akan mengelola koneksi SSH Anda untuk Anda, ini juga menghubungkan dengan sesi Putty yang disimpan sehingga Anda dapat menerapkan templat ke sesi.

Gubbin
sumber
0

Ini adalah "CMD" terakhir yang bisa saya simpan di FileServer saya dan buat pintasan di Desktop saya.

::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
sumber