Windows เทียบเท่า ssh - วิธีการเชื่อมต่อกับเครื่องระยะไกลและบรรทัดคำสั่งการเข้าถึง?


19

ฉันมีช่วงเวลาที่ยากลำบากในการหาทางแก้ปัญหาเพื่อขยายเฟรมเวิร์กที่ได้รับการออกแบบมาสำหรับเครื่อง * nix ไปยัง windows กรอบปัจจุบันทำงานจากเซิร์ฟเวอร์หนึ่ง * nix และ ssh ออกไปยังเซิร์ฟเวอร์ * nix อื่น ๆ และดำเนินการคำสั่งต่าง ๆ เช่นการตรวจสอบไฟล์บันทึกการซิงค์ไฟล์จากการควบคุมแหล่งที่มาส่งบันทึกกลับไปที่การควบคุมแหล่ง ฯลฯ ชิ้นใหญ่ฉัน ติดอยู่เป็นวิธีการเชื่อมต่อกับเครื่อง windows ระยะไกลและเข้าถึงบรรทัดคำสั่ง การเชื่อมต่อสามารถมาจากเครื่อง Windows เครื่องอื่นได้เช่นกันโดยไม่ต้องเริ่มจากเครื่องยูนิกซ์มันสามารถเปลี่ยนจาก windows เป็น windows แทนที่จะเป็น unix เป็น windows

นี่คือตัวอย่างของวิธีการรันคำสั่งในระบบยูนิกซ์ สิ่งนี้อยู่ในลูปที่ผ่านรายการของชื่อเซิร์ฟเวอร์ ฉันต้องได้รับสิ่งนี้เพื่อทำงานบนเครื่อง windows

ssh ${user}@${server} "cd /app/app_name/logs; <export source control params>; <submit logs to source control>" >> Log.txt

นอกจากนี้ฉันไม่ต้องการใช้เครื่องมือของบุคคลที่สาม (งบประมาณของฉันประมาณ $ 0) ฉันได้ตรวจสอบ PsExec และอีกสองสามคน แต่ดูเหมือนว่าคุณต้องการการเข้าถึงของผู้ดูแลระบบหรือต้องผ่านผู้ใช้ / ผ่านเป็นข้อความธรรมดา


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

ในขณะที่คุณสามารถติดตั้ง MobaSSH เป็นเซิร์ฟเวอร์และใช้ putty เป็นไคลเอนต์หรือใช้ psexec เพื่อทำสิ่งที่คุณต้องการมากหรือน้อย (ซึ่งเป็นที่ขมวดคิ้วจากประสบการณ์ของฉัน), สำนวนเทียบเท่าในโลก Windows ไม่ได้ใช้เปลือกที่ ทั้งหมด แต่ต้องพึ่งพาการสนับสนุนระดับคำสั่งสำหรับการดำเนินการจากระยะไกลไม่ว่าจะเป็นคำสั่งดั้งเดิมหรือ PowerShell รวมกับเครือข่ายที่ใช้ร่วมกันและไดรฟ์ที่แมป
Shanteva

คำตอบ:


14

ใช้ Powershell Remoting: https://msdn.microsoft.com/en-us/powershell/scripting/core-powershell/running-remote- คำสั่ง

คัดลอกวางอย่างไร้ยางอาย:

รีโมทของ Windows PowerShell

การควบคุมระยะไกลของ Windows PowerShell ซึ่งใช้โปรโตคอล WS-Management ช่วยให้คุณสามารถเรียกใช้คำสั่ง Windows PowerShell บนคอมพิวเตอร์ระยะไกลหนึ่งเครื่องหรือหลายเครื่อง มันช่วยให้คุณสร้างการเชื่อมต่อแบบถาวรเริ่มเซสชันแบบโต้ตอบ 1: 1 และเรียกใช้สคริปต์บนคอมพิวเตอร์หลายเครื่อง ในการใช้รีโมทของ Windows PowerShell คอมพิวเตอร์ระยะไกลจะต้องได้รับการกำหนดค่าสำหรับการจัดการระยะไกล หลังจากที่คุณได้กำหนดค่า Windows PowerShell remoting แล้วคุณสามารถใช้กลยุทธ์การ remoting มากมาย ส่วนที่เหลือของเอกสารนี้แสดงรายการเพียงไม่กี่รายการ

เริ่มเซสชันแบบโต้ตอบ

หากต้องการเริ่มเซสชันแบบโต้ตอบด้วยคอมพิวเตอร์ระยะไกลเครื่องเดียวให้ใช้ Enter-PSSession cmdlet ตัวอย่างเช่นเมื่อต้องการเริ่มเซสชันแบบโต้ตอบกับคอมพิวเตอร์ระยะไกล Server01 ให้พิมพ์:

Enter-PSSession Server01

พรอมต์คำสั่งจะเปลี่ยนเพื่อแสดงชื่อของคอมพิวเตอร์ที่คุณเชื่อมต่อ จากนั้นเป็นต้นไปคำสั่งใด ๆ ที่คุณพิมพ์ที่พรอมต์เรียกใช้บนคอมพิวเตอร์ระยะไกลและผลลัพธ์จะปรากฏบนเครื่องคอมพิวเตอร์

หากต้องการสิ้นสุดเซสชันการโต้ตอบให้พิมพ์:

Exit-PSSession

เรียกใช้คำสั่งระยะไกล

หากต้องการเรียกใช้คำสั่งใด ๆ บนคอมพิวเตอร์ระยะไกลหนึ่งเครื่องหรือหลายเครื่องให้ใช้คำสั่ง Invoke-Command ตัวอย่างเช่นเมื่อต้องการรันคำสั่ง Get-UICulture บนคอมพิวเตอร์ระยะไกล Server01 และ Server02 ให้พิมพ์:

invoke-command -computername Server01, Server02 {get-UICulture}

ผลลัพธ์จะถูกส่งกลับไปยังคอมพิวเตอร์ของคุณ

LCID    Name     DisplayName               PSComputerName
----    ----     -----------               --------------
1033    en-US    English (United States)   server01.corp.fabrikam.com
1033    en-US    English (United States)   server02.corp.fabrikam.com

เรียกใช้สคริปต์

ในการรันสคริปต์บนคอมพิวเตอร์ระยะไกลหนึ่งเครื่องหรือหลายเครื่องให้ใช้พารามิเตอร์ FilePath ของ Invoke-Command cmdlet สคริปต์ต้องเปิดอยู่หรือสามารถเข้าถึงได้ในคอมพิวเตอร์ของคุณ ผลลัพธ์จะถูกส่งคืนไปยังคอมพิวเตอร์ของคุณ

ตัวอย่างเช่นคำสั่งต่อไปนี้เรียกใช้สคริปต์ DiskCollect.ps1 บนคอมพิวเตอร์ระยะไกล Server01 และ Server02

invoke-command -computername Server01, Server02 -filepath c:\Scripts\DiskCollect.ps1

สร้างการเชื่อมต่อแบบถาวร

เมื่อต้องการเรียกใช้ชุดคำสั่งที่เกี่ยวข้องที่ใช้ข้อมูลร่วมกันสร้างเซสชันบนคอมพิวเตอร์ระยะไกลแล้วใช้ Invoke-Command cmdlet เพื่อเรียกใช้คำสั่งในเซสชันที่คุณสร้าง หากต้องการสร้างเซสชันระยะไกลให้ใช้ New-PSSession cmdlet

ตัวอย่างเช่นคำสั่งต่อไปนี้สร้างเซสชันระยะไกลบนคอมพิวเตอร์ Server01 และเซสชันระยะไกลอื่นบนคอมพิวเตอร์ Server02 มันจะบันทึกวัตถุเซสชันในตัวแปร $ s

$s = new-pssession -computername Server01, Server02

ตอนนี้เซสชันถูกสร้างขึ้นแล้วคุณสามารถเรียกใช้คำสั่งใด ๆ ในพวกเขา และเนื่องจากเซสชันยังคงอยู่คุณสามารถรวบรวมข้อมูลในหนึ่งคำสั่งและใช้ในคำสั่งต่อมา

ตัวอย่างเช่นคำสั่งต่อไปนี้รันคำสั่ง Get-Hotfix ในเซสชันในตัวแปร $ s และบันทึกผลลัพธ์ในตัวแปร $ h ตัวแปร $ h ถูกสร้างขึ้นในแต่ละเซสชันใน $ s แต่ไม่มีอยู่ในโลคัลเซสชัน

invoke-command -session $s {$h = get-hotfix}

ตอนนี้คุณสามารถใช้ข้อมูลในตัวแปร $ h ในคำสั่งที่ตามมาเช่นคำสั่งต่อไปนี้ ผลลัพธ์จะปรากฏบนเครื่องคอมพิวเตอร์

invoke-command -session $s {$h | where {$_.installedby -ne "NTAUTHORITY\SYSTEM"} }

5
นี่เป็นวิธีดั้งเดิมในการทำและควรเป็นคำตอบที่ยอมรับได้
Gregory Higley

SSH ใช้พอร์ต 22 บนเซิร์ฟเวอร์เพื่อเชื่อมต่อคุณช่วยฉันตรวจสอบพอร์ตที่โซลูชัน PowerShell ใช้หรือไม่
ลุค

1
@Luke blogs.technet.microsoft.com/christwe/2012/06/20/… 5985-5986 เป็นค่าเริ่มต้น แต่เหมือนสิ่งส่วนใหญ่คุณสามารถระบุพอร์ตอื่นได้
Shanteva

4

ลองtunnellierจาก Bitvise นั่นคือไคลเอนต์ ssh นอกจากนี้ยังมีเซิร์ฟเวอร์ sshสำหรับเชื่อมต่อกับเครื่อง windows ทั้งสองช่วยให้คุณสามารถทำการเชื่อมต่อที่ปลอดภัยพร้อมกับสิ่งที่ก้าวหน้ากว่าเช่นเว็บพร็อกซีหรือพอร์ตอุโมงค์


น่าเสียดายเซิร์ฟเวอร์ SSH ไม่ใช่ฟรีแวร์
แฮร์รี่จอห์นสตัน

4

ติดตั้งพอร์ต OpenSSH สำหรับ Windows - ฟรีและให้ทั้งไคลเอนต์และเซิร์ฟเวอร์


1
มีปัญหาด้านความปลอดภัย - เนื่องจากใช้ Cygwin จึงไม่ปลอดภัยสำหรับผู้ใช้หลายคน (เว้นแต่ข้อมูลของฉันจะล้าสมัย?)
แฮร์รี่จอห์นสตัน

1
Microsoft กำลังทำงานในการย้ายไปยัง windows อย่างถูกต้อง แต่ดูเหมือนว่าจะมีความคืบหน้าค่อนข้างช้า: blogs.msdn.microsoft.com/powershell/2017/12/15/ …
Martin Brown เมื่อ

2

คุณสามารถลองpsexecที่ให้เชลล์ระยะไกลผ่านบริการแชร์ไฟล์ (หรือเรียกว่า) นอกจากนี้ยังมีwinexeหากคุณต้องการใช้ Linux เป็นไคลเอนต์


1

ฉันชอบแนวคิดของ PowerShell จริงๆแม้ว่าการกำหนดค่าอาจใช้เวลาสองสามนาทีบนเซิร์ฟเวอร์และไคลเอนต์

นอกเหนือจากคำตอบที่สมบูรณ์ของ Shanteva ซึ่งแนะนำให้ใช้ PowerShell คุณควรดูที่นี่ในเว็บไซต์ howtogeek เกี่ยวกับวิธีการเปิดใช้งาน (และอนุญาต) การเชื่อมต่อระยะไกลไปยังเซิร์ฟเวอร์ PowerShell มีการกำหนดค่าเล็กน้อยบนคอมพิวเตอร์เซิร์ฟเวอร์

สองสิ่งสำคัญที่คุณต้องทำ: (ฉันไม่ต้องพูดถึงว่าคุณต้องทำทุกการกำหนดค่า 'ในฐานะผู้ดูแลระบบ' ใช่ไหมเพียงแค่เปิด PowerShell / cmd 'ในฐานะผู้ดูแลระบบ')

  • ครั้งแรกที่เปิดใช้บริการ WinRM (หน้าต่างโปรแกรมที่ประมวลผลคำสั่งระยะไกล) บนเซิร์ฟเวอร์

บนคอมพิวเตอร์เซิร์ฟเวอร์ให้เปิด PowerShell แล้วเรียกใช้:

Enable-PSRemoting -Force

นอกจากนี้ยังมีวิธีอื่นในการทำเช่นนี้ คุณสามารถเปิดพรอมต์คำสั่งแล้วเรียกใช้:

winrm -quickconfig

อาจมีการเปลี่ยนแปลงการกำหนดค่าอีกมากมาย ไม่จำเป็นตอนนี้

  • ประการที่สองเป็นที่น่าสังเกตว่าไคลเอนต์และเซิร์ฟเวอร์มักจะพยายามตรวจสอบซึ่งกันและกัน เซิร์ฟเวอร์ต้องการตรวจสอบให้แน่ใจว่าไคลเอนต์ได้อนุญาตให้เข้าถึงเซิร์ฟเวอร์จริงหรือไม่ เพื่อประโยชน์นี้คุณจะต้องให้ข้อมูลการรับรองความถูกต้องกับเซิร์ฟเวอร์ (คล้ายกับ SSH คุณอาจให้ชื่อผู้ใช้ / รหัสผ่าน) ในทางกลับกันลูกค้าต้องการให้แน่ใจว่าเซิร์ฟเวอร์นั้นเชื่อถือได้ สามารถใช้รูปแบบที่แตกต่างกันเช่นการไว้วางใจเซิร์ฟเวอร์ที่ให้การรับรองสาธารณะที่ชาญฉลาดหรือการเชื่อถือโดยอิงจากที่อยู่ IP หรืออาจเชื่อถือได้กับทุกคน !! อีกครั้งเรามีขั้นตอนเดียวกันใน SSH ที่เซิร์ฟเวอร์สามารถให้ข้อมูลการรับรองความถูกต้องบางอย่าง (เราแค่ลืมรายละเอียด SSH ไปก่อน)

หากคอมพิวเตอร์ทั้งสองเครื่องอยู่ใน 'โดเมน' เดียวกัน (กลุ่มคอมพิวเตอร์ที่ทุกคนมีกฎและบทบาทที่แตกต่างกัน) ขั้นตอนดูเหมือนจะง่าย (ฉันไม่ได้ลองเลย)

แต่เนื่องจากคุณอาจต้องการเข้าถึงเซิร์ฟเวอร์ของคุณผ่านอินเทอร์เน็ต (ทางเทคนิคเรียกว่าเครือข่าย WAN) มีปัญหาบางอย่างและคุณต้องเปลี่ยนการกำหนดค่าบางอย่างเพื่อให้สามารถเชื่อมต่อกับเซิร์ฟเวอร์ระยะไกลได้ บนคอมพิวเตอร์ไคลเอนต์เปิดใช้งานบริการ WINRM กระบวนการนี้คล้ายกับสิ่งที่เราทำสำหรับเซิร์ฟเวอร์ด้านบน เพียงแค่เรียกใช้คำสั่ง:

Enable-PSRemoting -Force

(น่าสังเกตอีกครั้ง! การอ้างอิงบางคนบอกว่าคอมพิวเตอร์ไคลเอนต์และคอมพิวเตอร์เซิร์ฟเวอร์ต้องอยู่ในเครือข่าย 'ส่วนตัว' หรือสิ่งทั้งหมดจะไม่ทำงานฉันได้รับข้อความแสดงข้อผิดพลาดเมื่อฉันเรียกใช้คำสั่งข้างต้น แต่ทุกอย่างทำงาน ฉันไม่แน่ใจเกี่ยวกับข้อเท็จจริงนี้ตรวจสอบหน้าเว็บดังกล่าว)

จากนั้นเรียกใช้บนคอมพิวเตอร์ไคลเอนต์ใน PowerShell:

Set-Item wsman:\localhost\client\trustedhosts *

ซึ่งหมายความว่าลูกค้าจะเชื่อถือเซิร์ฟเวอร์ทั้งหมด (โฮสต์) ในที่สุดเรียกใช้สิ่งนี้ (บนไคลเอนต์อีกครั้งฉันเน้น):

Restart-Service WinRM

คุณพร้อมที่จะไป ตรวจสอบคำตอบของ Shanteva ที่เหลือ บนคอมพิวเตอร์ไคลเอนต์ให้รันเช่น:

Enter-PSSession -ComputerName 12.34.56.78 -Credential Administrator

มันจะถามรหัสผ่านและรีโมตคอนโซลเปิดขึ้นซึ่งมีลักษณะดังนี้:

[12.34.56.78]: PS C:\Users\Administrator\Documents>

จากนั้นเพียงป้อนคำสั่งเช่นเดียวกับที่คุณทำกับ SSH

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