สร้างแบตช์ไฟล์หรือทางลัดไปยัง PuTTY (ssh) ที่เปิดเซสชันและรันคำสั่ง


10

ฉันมักจะพบว่าตัวเองกำลังเปิดเซสชัน SSH เพื่อเรียกใช้คำสั่งเดียว ฉันมีการตั้งค่าทุกอย่างเพื่อเข้าสู่ระบบโดยไม่ต้องใส่รหัสผ่าน (ผ่าน SSH Key-Based Auth) ดังนั้นฉันสงสัยว่ามีวิธีการสร้างทางลัดหรือไฟล์แบตช์ใน Windows ที่จะโหลด PuTTY หรือโปรแกรมที่คล้ายกันจากนั้น คำสั่ง (และอาจเป็นไปได้ถ้าผลลัพธ์ดี)

คำตอบ:


14

ใช้เวอร์ชัน PuTTY ของ commandline plink.exeเพื่อเริ่มต้นการเชื่อมต่อ SSH กับโฮสต์ที่เลือกไว้ ใช้-sshสวิตช์เพื่อเชื่อมต่อกับ SSH ด้วย-mสวิตช์คุณสามารถรวมไฟล์คำสั่ง:

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

คุณสามารถดาวน์โหลดได้plink.exeจากที่นี่

ขั้นตอนสุดท้ายคือการสร้างทางลัดรวมถึงplink.exeพารามิเตอร์ที่ต้องการ

ตรวจสอบเอกสารประกอบ Plink สำหรับพารามิเตอร์ต่าง ๆ อื่น ๆ : เอกสารประกอบ Plink.exe


1
ไม่จำเป็นต้องใช้-mสวิทช์ที่มี Plink ขณะที่มันช่วยให้การระบุคำสั่งโดยตรงบนบรรทัดคำสั่งให้ดูคำตอบของฉัน
Martin Prikryl

ฉันเลือกคำตอบนี้ตามที่ฉันต้องการใช้-ssh host1ซึ่งเกี่ยวข้องกับ putty Profile vsuser@host
FreeSoftwareServers

@FreeSoftwareServers ไม่มีความแตกต่างกับ PuTTY ในส่วนนี้ คุณสามารถทำplink site commandแบบเดียวกับ PuTTY (ยกเว้นcommand) Plink และ PuTTY มีชุดตัวเลือกบรรทัดคำสั่งเหมือนกัน
Martin Prikryl

8

ในการทำให้คำสั่งดำเนินการโดยอัตโนมัติให้ใช้Plink (จากแพคเกจ PuTTY)ไม่ใช่ PuTTY

Plink ยอมรับคำสั่งบนบรรทัดคำสั่ง:

plink.exe user@host command

หากคุณต้องการใช้ PuTTY ต่อไปคุณสามารถใช้-mสวิตช์เพื่อระบุไฟล์คำสั่ง (Plink รองรับ-mสวิตช์ได้เช่นกัน)


เมื่อฉันบอกว่าฉันไม่มีรหัสผ่านฉันควรระบุว่าฉันหมายถึงการรับรองความถูกต้องด้วย SSH Key-based แต่ฉันคิดว่ามันน่าจะสันนิษฐานได้ ฉันไม่คิดว่าเรื่องนี้จะทำงานตามที่มันจะต้องพารามิเตอร์เพิ่มเหมือน-i keyหรือ-pw password
FreeSoftwareServers

@FreeSoftwareServers ไม่มีความแตกต่างกับ PuTTY ในส่วนนี้ คุณสามารถทำplink site commandแบบเดียวกับ PuTTY (ยกเว้นcommand) Plink และ PuTTY มีชุดตัวเลือกบรรทัดคำสั่งเหมือนกัน
Martin Prikryl

คำตอบของคุณไม่รวมถึงตัวเลือกในการใช้การเข้าสู่ระบบตามคีย์ SSH หรือการเข้าสู่ระบบ PWDless ในขณะที่มีการตั้งค่าสถานะที่ถูกต้องฉันพบพวกเขาในหน้า man สำหรับ plink ซึ่งรวมอยู่ในคำตอบ MrPowerUsers ฉันเข้าใจว่าทั้งสอง มีคำถามที่ดีกว่าและเชื่อมโยง man pages เช่นกัน
FreeSoftwareServers

6

คุณสามารถใช้การกำหนดค่าแบบฉาบเพื่อให้ได้สิ่งนี้

โหลด putty และกำหนดค่าเซสชันของคุณ

ป้อนคำสั่งระยะไกลที่คุณต้องการเรียกใช้ที่นี่:

กล่องคำสั่งฉาบระยะไกล

จากนั้นก่อนคลิก " เปิด " กลับไปที่แท็บ " เซสชัน " (ที่ด้านบน) และบันทึกการกำหนดค่าของคุณ

ตอนนี้สร้างทางลัดเพื่อputty.exeเพิ่มการ-loadตั้งค่าสถานะตัวอย่างเช่น:

%PATH_TO_PUTTY%\putty.exe -load my_config

ตอนนี้คุณสามารถคลิกที่ทางลัดและมันจะโหลดเซสชั่นของคุณดำเนินการคำสั่งของคุณ


ดูเหมือนการทดสอบที่น่ากลัวและไม่ดีในวันพรุ่งนี้ฉันคิดว่าฉันจะรันสคริปต์และสามารถจบเซสชันตามผลลัพธ์ของสคริปต์ได้
FreeSoftwareServers

ใช่เซสชันจะสิ้นสุดเมื่อคำสั่งยุติ หากคุณต้องการให้ PuTTY วางสายเมื่อทำเสร็จแล้ว (เช่นเพื่อตรวจสอบผลลัพธ์) ให้ตั้งค่า " ปิดหน้าต่างเมื่อออก " ในแท็บ " เซสชัน "
Attie

2

หากคุณใช้ Windows 10 คุณอาจสนใจที่จะทราบว่า Microsoft แจ้งว่ามีเบต้าของ OpenSSH (ไคลเอ็นต์และเซิร์ฟเวอร์ ):

[…] ไปที่“ จัดการคุณสมบัติเสริม” แล้ว +“ เพิ่มคุณสมบัติ” จากนั้นคุณสามารถเลื่อนรายการลงและค้นหาคุณลักษณะ OpenSSH Client (Beta) และ OpenSSH Server (Beta) ใน Windows แนวคิดของการเรียกใช้บริการระยะไกลอื่นบน Windows อาจทำให้เราไม่โทษคุณถ้าคุณไม่ต้องการติดตั้งเซิร์ฟเวอร์

เมื่อติดตั้งแล้วคุณก็สามารถยิงขึ้นบรรทัดคำสั่งของคุณและใช้โปรแกรม OpenSSH SSH ssh ubuntu@someIPโดยพิมพ์ตามคำสั่งเช่น

นี่คือsshคู่มือการใช้งานคำสั่งปัจจุบัน (ณ วันที่ 28 พฤศจิกายน 2017) ที่เราได้รับพร้อมกับไคลเอนต์ 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>

หากใช้งานได้คุณควรใช้ตามที่sshต้องการใน * Nix:

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

นั่นเจ๋งจริง ๆ ที่รู้ แต่ฉันรัก SuperPuTTY ฉันจะจับตาดู Windows OpenSSH เช่นกัน
FreeSoftwareServers

คุณจำเป็นต้องมีไคลเอ็นต์ ssh บนเครื่องที่คุณกำลัง remoting หรือไม่? ฉันถามเพราะบางเครื่องที่ฉันใช้รีโมทไม่ใช่ Windows 10
Nelda.techspiress

1
@ Nelda.techspiress คุณควรต้องใช้เซิร์ฟเวอร์ที่ทำงานบนเครื่องที่คุณลงชื่อเข้าใช้และต้องการไคลเอ็นต์บนเครื่องที่คุณลงชื่อเข้าใช้เท่านั้น (ตามลําดับหากคุณลงชื่อเข้าใช้เครื่องหนึ่งเป็นพร็อกซีเพื่อข้ามไปอีกเครื่องหนึ่งเครื่องกลางจะต้องใช้ทั้งคู่)
Michael - Where's Clay Shirky

2

แค่คิดว่าฉันจะใส่สคริปต์ที่ฉันทำเพื่อหวังว่าจะได้ประหยัดเวลาบางคนที่จะใช้ไวยากรณ์และการวิจัยหน้ามนุษย์

a) ไฟล์ SingleIP, IP Range หรือ IPList

b) ชื่อสคริปต์เพื่อทำงานบน IP / range (สคริปต์ unix sh / ksh type จริง)

c) เลือกสแกน nmap สำหรับพอร์ต 22 ที่เปิดอยู่ (เช่น subnet กับเครื่องที่ไม่ใช่ Linux)

- ต้องการหลีกเลี่ยงการใช้สีโป๊ว IPs ไม่สามารถเชื่อมต่อได้หลีกเลี่ยงสคริปต์ที่จะสามารถดำเนินการต่อได้อย่างถูกต้อง

d) เลือกรันคำสั่ง pscp เพื่อทำการ autocache คีย์โฮสต์ (putty ไม่ทำสิ่งนี้โดยอัตโนมัติ)

ชุดนี้จะถือว่า:

1. คุณมีแพคเกจ PuTTY เต็มรูปแบบและคีย์ SSH ติดตั้งใน C: \ Program Files \ PuTTY \

2. ไฟล์แบทช์ / สคริปต์ / IPlist ที่ติดตั้งใน C: \ Program Files \ PuTTY \ scripts \

3. ไดเร็กทอรีการทำงานของ NMAP และ PuTTY อยู่ในพา ธ คำสั่งของคุณ

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

สิ่งนี้มีประโยชน์เป็นส่วนใหญ่สำหรับการมีสคริปต์เดียว (เช่นการอัปเดตใบรับรอง SSL) ในเครื่องต่างๆ

นี่คือไฟล์แบตช์ที่สมบูรณ์:

@ECHO OFF

rem คุณต้องแก้ไขส่วน CACHEKEY และ SCRIPT เพื่อแสดงตำแหน่งคีย์ SSH ของคุณ

ตั้ง IPFILE = IPList_temp.txt
ตั้ง runagain = n
ตั้งค่า OPTION = 1
ตั้ง RANGE =
ตั้งค่า IP =
ตั้ง SCAN = n
ตั้ง KEYCACHE = n

: ตัวเลือก
CLS
ECHO (ไดเร็กทอรีการทำงานถูกตั้งค่าเป็น C: \ Program Files \ PuTTY \ script \)
ECHO 
ECHO 1. IP เดียว
ECHO 2. ไฟล์รายการ IP
ECHO 3. ช่วง IP
ECHO
set / p OPTION = "เลือกประเภท IP:"
IF% OPTION% == 3 GOTO IPRANGE
IF% OPTION% == 2 GOTO IPLIST
IF% OPTION% == 1 GOTO SINGLEIP
echo โปรดเลือกตัวเลือกที่ถูกต้อง
ตัวเลือก GOTO

: IPRANGE
ECHO ป้อนช่วง IP ดังที่แสดงในตัวอย่างต่อไปนี้ ใช้ช่องว่างระหว่างหลายช่วง:
ECHO เช่น "10.21.0.15-99 10.21.1.15-100"
set / p RANGE = เข้าสู่ช่วง: 
echo% RANGE%>% IPFILE%
GOTO SCRIPTNAME

: SINGLEIP
set / p IP = ป้อน IP:
echo% IP%>% IPFILE%
GOTO SCRIPTNAME

: IPLIST
set / p IP = ป้อนชื่อไฟล์ IPList:
คัดลอก / Y% IP%% IPFILE%
GOTO SCRIPTNAME

: สคริปต์
set / p SCRIPT = ป้อนชื่อสคริปต์:
หากไม่มีอยู่% SCRIPT% (
ชื่อไฟล์ echo ไม่มีอยู่!
GOTO SCRIPTNAME)

ECHO
set / p SCAN = สแกน Nmap ก่อนหรือไม่? (แนะนำ):
ถ้า% SCAN% == n GOTO: RUNCACHE

ตรวจสอบว่าประเภท IP เป็น "ช่วง" เนื่องจาก nmap ไม่สามารถอ่านช่วง IP จากไฟล์และต้องพิมพ์โดยตรงในคำสั่ง nmap
IF% OPTION% == 3 GOTO NMAPRANGE 
: NMAP
echo Scanning IPs สำหรับพอร์ต 22 ที่เปิด ...
nmap - เปิด -n -p22 -iL% IPFILE% -oG - | findstr / E Up> nmap_temp.txt
GOTO AFTERNMAP

: NMAPRANGE
echo Scanning IPs สำหรับพอร์ต 22 ที่เปิด ...
nmap - เปิด -n -p22% RANGE% -oG - | findstr / E Up> nmap_temp.txt

: AFTERNMAP
ทำเสียงสะท้อน
การจัดรูปแบบ rem nmap ไม่ถูกต้องข้อมูลต่อไปนี้จะลบข้อมูลเพิ่มเติม
สำหรับ / f "tokens = 2" %% A ใน (nmap_temp.txt) ทำเสียงก้อง %% A >> nmap_temp2.txt
rem ลบพื้นที่ที่ซ่อนอยู่ตอนท้ายของ IP (ต้องการ "repl" อยู่ในไดเรกทอรีไฟล์แบตช์)
พิมพ์ "nmap_temp2.txt" | repl "" "">% IPFILE%

: RUNCACHE
set / p KEYCACHE = สแกนและแคชคีย์ SSH (y / n) หรือไม่
ถ้า% KEYCACHE% == n GOTO SCRIPT

: cacheKey
rem เรียกใช้ IP ทั้งหมดเพื่อแคชคีย์โฮสต์ SSH หากยังไม่ได้แคช
สำหรับ / F "tokens = *" %% A ใน (% IPFILE%) ทำ (echo y | "C: \ Program Files \ PuTTY \ pscp.exe" -l root -i "C: \ Program Files \ PuTTY \ SSH .ppk "-touch %% A: / tmp / test)

: SCRIPT
สำหรับ / F "tokens = 1" %% A ใน (% IPFILE%) ทำ ("C: \ Program Files \ PuTTY \ putty.exe" -ssh %% A -t -l root -i "C: \ Program Files \ PuTTY \ SSH.ppk "-m" C: \ Program Files \ PuTTY \ สคริปต์ \% SCRIPT% ")
หากมีอยู่ nmap_temp.txt (del nmap_temp.txt)
หากมีอยู่ nmap_temp2.txt (del nmap_temp2.txt)
set / p runagain = "กด Enter เพื่อเสร็จสิ้นหรือ y เพื่อรันใหม่"
ถ้า% runagain% == y ตัวเลือก GOTO

1
ลิงก์เฉพาะคำตอบที่ขมวดคิ้วจะเกิดอะไรขึ้นถ้าไซต์ของคุณหยุดทำงาน หากคุณต้องการมีส่วนร่วมโปรดแบ่งปันสคริปต์ที่นี่ คุณยินดีที่จะโพสต์แหล่งที่มา / ลิงค์ไปยังเว็บไซต์พร้อมกับรหัสที่นี่ แต่คำตอบควรอยู่ในตัวเองและไม่จำเป็นต้องมีลิงค์ต่อไปนี้
FreeSoftwareServers

1
วางเนื้อหาชุด
Todd Porter

อย่า"autocache"คีย์โฮสต์ การตรวจสอบคีย์โฮสต์เป็นส่วนสำคัญของการรักษาความปลอดภัยเซสชัน SSH ของคุณ PuTTY (และเครื่องมือ) ไม่ขอรหัสโฮสต์เพื่อความสนุกสนานหรือก่อกวนคุณ มันมีเหตุผล! + คุณไม่ควรจัดเก็บข้อมูลผู้ใช้ ( SSH.ppkและ) to โฟลเดอร์สคริปต์Program Files`
Martin Prikryl

คุณสามารถแนะนำวิธีการเรียกใช้สคริปต์ในหลาย ๆ IP โดยไม่ต้องได้หรือไม่ ก) สิ่งนี้ไม่ได้มีไว้สำหรับเดสก์ท็อปผู้ใช้ทั่วไปมากขึ้นสำหรับเซิร์ฟเวอร์ผู้ดูแลระบบที่ความปลอดภัยมากกว่าใครสามารถเข้าถึงเซิร์ฟเวอร์ b) ความเสี่ยงด้านความปลอดภัยคืออะไร? การแคชโฮสต์คีย์นั้นเป็นทางเลือกและควรทำเพียงครั้งเดียวในทุกช่วง หากคุณเรียกใช้สคริปต์อีกครั้งโดยไม่ใช้แคชคุณจะยังคงเห็นและโฮสต์การเปลี่ยนแปลงที่สำคัญและสคริปต์จะไม่ดำเนินการต่อไป ...
ทอดด์ Porter

...... ในข้อตกลงเกี่ยวกับคีย์เจ้า ฉันชี้ไปที่โฟลเดอร์ที่แชร์ใน NAS ของเราว่าโฟลเดอร์ที่ใช้ร่วมกันอยู่ที่ใดซึ่งฉันเท่านั้นที่สามารถเข้าถึงได้ ฉันเพิ่งเลือกเส้นทางเนื่องจากผู้ใช้รายอื่นจะแตกต่างกัน
Todd Porter

1

คุณยังสามารถดูซอฟต์แวร์เช่น mRemoteNG, MOBAxTerm หรือ SecureCRT ซึ่งจะจัดการการเชื่อมต่อ SSH ของคุณให้คุณซึ่งจะเชื่อมโยงกับเซสชัน PuTTY ที่บันทึกไว้เพื่อให้คุณสามารถใช้เทมเพลตกับเซสชัน


0

นี่คือ "CMD" สุดท้ายที่ฉันสามารถบันทึกลงใน FileServer ของฉันและสร้างทางลัดบนเดสก์ท็อปของฉัน

::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
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.