PowerShell ระยะไกลผ่าน SSH
ภาพรวม
โดยปกติแล้ว ระยะไกลของ PowerShell จะใช้ WinRM สำหรับการเจรจาการเชื่อมต่อและการถ่ายโอนข้อมูล SSH พร้อมใช้งานแล้วสำหรับแพลตฟอร์ม Linux และ Windows และอนุญาตให้ใช้งานระยะไกล PowerShell หลายแพลตฟอร์มได้อย่างแท้จริง
WinRM จัดเตรียมโมเดลโฮสติ้งที่มีประสิทธิภาพสำหรับเซสชันระยะไกลของ PowerShell การทำงานระยะไกลแบบ SSH ไม่รองรับการกำหนดค่าปลายทางระยะไกลและ Just Enough Administration (JEA) ในปัจจุบัน
การควบคุมระยะไกล SSH ช่วยให้คุณทำเซสชัน PowerShell พื้นฐานระยะไกลระหว่างคอมพิวเตอร์ Windows และ Linux ระยะไกล SSH จะสร้างกระบวนการโฮสต์ PowerShell บนคอมพิวเตอร์เป้าหมายในฐานะระบบย่อย SSH ในที่สุดเราจะใช้โมเดลโฮสติ้งทั่วไปซึ่งคล้ายกับ WinRM เพื่อรองรับการกำหนดค่าตำแหน่งข้อมูลและ JEA
New-PSSession, Enter-PSSession และ Invive-Command cmdlet ขณะนี้มีการตั้งค่าพารามิเตอร์ใหม่เพื่อรองรับการเชื่อมต่อระยะไกลใหม่นี้
[-HostName <string>] [-UserName <string>] [-KeyFilePath <string>]
หากต้องการสร้างเซสชันระยะไกล คุณต้องระบุคอมพิวเตอร์เป้าหมายด้วยพารามิเตอร์ HostName และระบุชื่อผู้ใช้ด้วย ชื่อผู้ใช้ เมื่อเรียกใช้ cmdlets แบบโต้ตอบ คุณจะได้รับพร้อมท์ให้ใส่รหัสผ่าน คุณยังสามารถใช้การตรวจสอบสิทธิ์คีย์ SSH โดยใช้ไฟล์คีย์ส่วนตัวที่มีพารามิเตอร์ KeyFilePath การสร้างคีย์สำหรับการตรวจสอบสิทธิ์ SSH จะแตกต่างกันไปตามแพลตฟอร์ม
ข้อมูลการตั้งค่าทั่วไป
PowerShell 6 หรือสูงกว่า และต้องติดตั้ง SSH ในคอมพิวเตอร์ทุกเครื่อง ติดตั้งทั้งไคลเอนต์ SSH (ssh.exe) และเซิร์ฟเวอร์ (sshd.exe) เพื่อให้คุณสามารถเข้าและออกจากคอมพิวเตอร์จากระยะไกลได้ OpenSSH สำหรับ Windows พร้อมใช้งานแล้วใน Windows 10 build 1809 และ Windows Server 2019 สำหรับข้อมูลเพิ่มเติม โปรดดูที่จัดการ Windows ด้วย OpenSSH สำหรับ Linux ให้ติดตั้ง SSH รวมถึงเซิร์ฟเวอร์ sshd ที่เหมาะกับแพลตฟอร์มของคุณ คุณต้องติดตั้ง PowerShell จาก GitHub เพื่อรับคุณสมบัติระยะไกล SSH ต้องกำหนดค่าเซิร์ฟเวอร์ SSH เพื่อสร้างระบบย่อย SSH เพื่อโฮสต์กระบวนการ PowerShell บนคอมพิวเตอร์ระยะไกล และคุณต้องเปิดใช้งานการตรวจสอบสิทธิ์ รหัสผ่าน หรือ ตามคีย์
ติดตั้งบริการ SSH บนคอมพิวเตอร์ Windows
ติดตั้ง PowerShell เวอร์ชันล่าสุด สำหรับข้อมูลเพิ่มเติม โปรดดูที่การติดตั้ง PowerShell บน Windows
คุณสามารถยืนยันได้ว่า PowerShell มีการสนับสนุนระยะไกล SSH โดยการแสดงรายการชุดพารามิเตอร์
New-PSSessionคุณจะสังเกตเห็นว่ามีชื่อชุดพารามิเตอร์ที่ขึ้นต้นด้วย SSH ชุดพารามิเตอร์เหล่านั้นประกอบด้วยพารามิเตอร์ SSH(Get-Command New-PSSession).ParameterSets.NameName ---- SSHHost SSHHostHashParamติดตั้ง Win32 OpenSSH ล่าสุด สำหรับคำแนะนำในการติดตั้ง โปรดดูที่การเริ่มต้นใช้งาน OpenSSH
บันทึก
หากคุณต้องการตั้งค่า PowerShell เป็นเชลล์เริ่มต้นสำหรับ OpenSSH โปรดดูการกำหนดค่า Windows สำหรับ OpenSSH
แก้ไขไฟล์
sshd_configซึ่งอยู่ที่$env:ProgramData\sshตรวจสอบให้แน่ใจว่าเปิดใช้งานการตรวจสอบรหัสผ่านแล้ว:
PasswordAuthentication yesสร้างระบบย่อย SSH ที่โฮสต์กระบวนการ PowerShell บนคอมพิวเตอร์ระยะไกล:
Subsystem powershell c:/progra~1/powershell/7/pwsh.exe -sshs -nologoบันทึก
ตั้งแต่ PowerShell 7.4 เป็นต้นไป คุณไม่จำเป็นต้องใช้พารามิเตอร์
-nologoอีกต่อไปเมื่อใช้งาน PowerShell ในโหมดเซิร์ฟเวอร์ SSHบันทึก
ตำแหน่งเริ่มต้นของไฟล์ปฏิบัติการ PowerShell คือ
c:/progra~1/powershell/7/pwsh.exeตำแหน่งอาจแตกต่างกันไปขึ้นอยู่กับวิธีที่คุณติดตั้ง PowerShellคุณต้องใช้ชื่อย่อ 8.3 สำหรับพาธไฟล์ใดๆ ที่มีช่องว่าง มีข้อบกพร่องใน OpenSSH สำหรับ Windows ที่ทำให้ช่องว่างไม่สามารถทำงานได้ในเส้นทางปฏิบัติการของระบบย่อย สำหรับข้อมูลเพิ่มเติม โปรดดูปัญหา GitHub นี้
ชื่อย่อ 8.3 สำหรับโฟลเดอร์
Program Filesใน Windows มักจะเป็นProgra~1อย่างไรก็ตาม คุณสามารถใช้คำสั่งต่อไปนี้เพื่อให้แน่ใจว่า:Get-CimInstance Win32_Directory -Filter 'Name="C:\\Program Files"' | Select-Object EightDotThreeFileNameEightDotThreeFileName --------------------- c:\progra~1ทางเลือก เปิดใช้งานการรับรองความถูกต้องของคีย์:
PubkeyAuthentication yesสำหรับข้อมูลเพิ่มเติม โปรดดูที่การจัดการคีย์ OpenSSH
เริ่มบริการ sshd ใหม่
Restart-Service sshdเพิ่มเส้นทางที่ติดตั้ง OpenSSH ลงในตัวแปรสภาพแวดล้อม Path ของคุณ ตัวอย่างเช่น
C:\Program Files\OpenSSH\รายการนี้อนุญาตให้พบssh.exe
ติดตั้งบริการ SSH บนคอมพิวเตอร์ Ubuntu Linux
ติดตั้ง PowerShell เวอร์ชันล่าสุด โปรดดูการติดตั้ง PowerShell บน Ubuntu
-
ติดตั้งเซิร์ฟเวอร์ Ubuntu OpenSSH
sudo apt install openssh-client sudo apt install openssh-server แก้ไขไฟล์
sshd_configที่ตำแหน่ง/etc/sshตรวจสอบให้แน่ใจว่าเปิดใช้งานการตรวจสอบรหัสผ่านแล้ว:
PasswordAuthentication yesทางเลือก เปิดใช้งานการรับรองความถูกต้องของคีย์:
PubkeyAuthentication yesสำหรับข้อมูลเพิ่มเติมเกี่ยวกับการสร้างคีย์ SSH บน Ubuntu โปรดดูที่ manpage สำหรับ ssh-keygen
เพิ่มรายการระบบย่อย PowerShell:
Subsystem powershell /usr/bin/pwsh -sshs -nologoบันทึก
ตำแหน่งเริ่มต้นของไฟล์ปฏิบัติการ PowerShell คือ
/usr/bin/pwshตำแหน่งอาจแตกต่างกันไปขึ้นอยู่กับวิธีที่คุณติดตั้ง PowerShellบันทึก
ตั้งแต่ PowerShell 7.4 เป็นต้นไป คุณไม่จำเป็นต้องใช้พารามิเตอร์
-nologoอีกต่อไปเมื่อใช้งาน PowerShell ในโหมดเซิร์ฟเวอร์ SSHเริ่มบริการ ssh ใหม่
sudo systemctl restart sshd.service
ติดตั้งบริการ SSH บนคอมพิวเตอร์ macOS
ติดตั้ง PowerShell เวอร์ชันล่าสุด สำหรับข้อมูลเพิ่มเติม การติดตั้ง PowerShell บน macOS
ตรวจสอบให้แน่ใจว่าเปิดใช้งาน SSH Remoting โดยทำตามขั้นตอนเหล่านี้:
- เปิด
การตั้งค่าระบบ
- เปิด
- คลิกที่
ทั่วไป - คลิกที่
การแบ่งปัน - เลือก
การเข้าสู่ระบบระยะไกลเพื่อตั้งค่าการเข้าสู่ระบบระยะไกล: เปิด - อนุญาตให้เข้าถึงผู้ใช้ที่เหมาะสม
แก้ไขไฟล์ sshd_config ที่ตำแหน่ง /private/etc/ssh/sshd_config
ใช้โปรแกรมแก้ไขข้อความเช่น นาโน:
sudo nano /private/etc/ssh/sshd_config
ตรวจสอบให้แน่ใจว่าเปิดใช้งานการตรวจสอบรหัสผ่านแล้ว:
PasswordAuthentication yes
เพิ่มรายการระบบย่อย PowerShell:
Subsystem powershell /usr/local/bin/pwsh -sshs -nologo
บันทึก
ตำแหน่งเริ่มต้นของไฟล์ปฏิบัติการ PowerShell คือ /usr/local/bin/pwsh ตำแหน่งอาจแตกต่างกันไปขึ้นอยู่กับวิธีที่คุณติดตั้ง PowerShell
บันทึก
ตั้งแต่ PowerShell 7.4 เป็นต้นไป คุณไม่จำเป็นต้องใช้พารามิเตอร์ -nologo อีกต่อไปเมื่อใช้งาน PowerShell ในโหมดเซิร์ฟเวอร์ SSH
ทางเลือก เปิดใช้งานการรับรองความถูกต้องของคีย์:
PubkeyAuthentication yes
เริ่มบริการ sshd ใหม่
sudo launchctl stop com.openssh.sshd
sudo launchctl start com.openssh.sshd
บันทึก
เมื่อคุณอัพเกรดระบบปฏิบัติการ ไฟล์การกำหนดค่า SSH อาจถูกเขียนทับ ตรวจสอบให้แน่ใจว่าคุณตรวจสอบไฟล์การกำหนดค่าหลังการอัพเกรด
การรับรองความถูกต้อง
การดำเนินการระยะไกลของ PowerShell ผ่าน SSH อาศัยการแลกเปลี่ยนการรับรองความถูกต้องระหว่างไคลเอ็นต์ SSH และบริการ SSH และไม่ได้ใช้แผนการรับรองความถูกต้องใดๆ ผลลัพธ์ก็คือแผนการตรวจสอบสิทธิ์ที่กำหนดค่าไว้ รวมถึงการตรวจสอบสิทธิ์แบบหลายปัจจัยได้รับการจัดการโดย SSH และไม่ขึ้นอยู่กับ PowerShell ตัวอย่างเช่น คุณสามารถกำหนดค่าบริการ SSH ให้ต้องมีการตรวจสอบสิทธิ์คีย์สาธารณะและรหัสผ่านแบบใช้ครั้งเดียวเพื่อเพิ่มความปลอดภัย การกำหนดค่าการรับรองความถูกต้องแบบหลายปัจจัยอยู่นอกขอบเขตของเอกสารนี้ โปรดดูเอกสารประกอบสำหรับ SSH เกี่ยวกับวิธีกำหนดค่าการรับรองความถูกต้องแบบหลายปัจจัยอย่างถูกต้อง และตรวจสอบความถูกต้องว่าทำงานนอก PowerShell ก่อนที่จะพยายามใช้กับระยะไกลของ PowerShell
บันทึก
ผู้ใช้ยังคงมีสิทธิ์เหมือนเดิมในเซสชันระยะไกล หมายความว่าผู้ดูแลระบบสามารถเข้าถึงเชลล์ที่ยกระดับได้ และผู้ใช้ทั่วไปไม่สามารถเข้าถึงได้
ตัวอย่างระยะไกลของ PowerShell
วิธีที่ง่ายที่สุดในการทดสอบระยะไกลคือลองใช้คอมพิวเตอร์เครื่องเดียว ในตัวอย่างนี้ เราสร้างเซสชันระยะไกลกลับไปยังคอมพิวเตอร์ Linux เครื่องเดียวกัน เรากำลังใช้ PowerShell cmdlets แบบโต้ตอบ ดังนั้นเราจึงเห็นข้อความแจ้งจาก SSH ที่ขอให้ตรวจสอบคอมพิวเตอร์โฮสต์และขอให้ใส่รหัสผ่าน คุณสามารถทำสิ่งเดียวกันบนคอมพิวเตอร์ Windows เพื่อให้แน่ใจว่าการทำงานระยะไกลทำงานได้ จากนั้น รีโมทระหว่างคอมพิวเตอร์โดยการเปลี่ยนชื่อโฮสต์
ลินุกซ์ถึงลินุกซ์
$session = New-PSSession -HostName UbuntuVM1 -UserName TestUser
The authenticity of host 'UbuntuVM1 (9.129.17.107)' can't be established.
ECDSA key fingerprint is SHA256:2kCbnhT2dUE6WCGgVJ8Hyfu1z2wE4lifaJXLO7QJy0Y.
Are you sure you want to continue connecting (yes/no)?
TestUser@UbuntuVM1s password:
$session
Id Name ComputerName ComputerType State ConfigurationName Availability
-- ---- ------------ ------------ ----- ----------------- ------------
1 SSH1 UbuntuVM1 RemoteMachine Opened DefaultShell Available
Enter-PSSession $session
[UbuntuVM1]: PS /home/TestUser> uname -a
Linux TestUser-UbuntuVM1 4.2.0-42-generic 49~16.04.1-Ubuntu SMP Wed Jun 29 20:22:11 UTC 2016 x86_64 x86_64 x86_64 GNU/Linux
[UbuntuVM1]: PS /home/TestUser> Exit-PSSession
Invoke-Command $session -ScriptBlock { Get-Process pwsh }
Handles NPM(K) PM(K) WS(K) CPU(s) Id SI ProcessName PSComputerName
------- ------ ----- ----- ------ -- -- ----------- --------------
0 0 0 19 3.23 10635 635 pwsh UbuntuVM1
0 0 0 21 4.92 11033 017 pwsh UbuntuVM1
0 0 0 20 3.07 11076 076 pwsh UbuntuVM1
ลินุกซ์เป็นวินโดวส์
Enter-PSSession -HostName WinVM1 -UserName PTestName
PTestName@WinVM1s password:
[WinVM1]: PS C:\Users\PTestName\Documents> cmd /c ver
Microsoft Windows [Version 10.0.10586]
วินโดวส์เป็นวินโดวส์
C:\Users\PSUser\Documents>pwsh.exe
PowerShell
Copyright (c) Microsoft Corporation. All rights reserved.
$session = New-PSSession -HostName WinVM2 -UserName PSRemoteUser
The authenticity of host 'WinVM2 (10.13.37.3)' can't be established.
ECDSA key fingerprint is SHA256:kSU6slAROyQVMEynVIXAdxSiZpwDBigpAF/TXjjWjmw.
Are you sure you want to continue connecting (yes/no)?
Warning: Permanently added 'WinVM2,10.13.37.3' (ECDSA) to the list of known hosts.
PSRemoteUser@WinVM2's password:
$session
Id Name ComputerName ComputerType State ConfigurationName Availability
-- ---- ------------ ------------ ----- ----------------- ------------
1 SSH1 WinVM2 RemoteMachine Opened DefaultShell Available
Enter-PSSession -Session $session
[WinVM2]: PS C:\Users\PSRemoteUser\Documents> $PSVersionTable
Name Value
---- -----
PSEdition Core
PSCompatibleVersions {1.0, 2.0, 3.0, 4.0...}
SerializationVersion 1.1.0.1
BuildVersion 3.0.0.0
CLRVersion
PSVersion 6.0.0-alpha
WSManStackVersion 3.0
PSRemotingProtocolVersion 2.3
GitCommitId v6.0.0-alpha.17
[WinVM2]: PS C:\Users\PSRemoteUser\Documents>
ข้อจำกัด
คำสั่ง sudo ไม่ทำงานในเซสชันระยะไกลกับคอมพิวเตอร์ Linux
PSRemoting ผ่าน SSH ไม่รองรับโปรไฟล์และไม่สามารถเข้าถึง
$PROFILEเมื่ออยู่ในเซสชั่น คุณสามารถโหลดโปรไฟล์โดย dot จัดหาโปรไฟล์ด้วยพาธไฟล์แบบเต็ม สิ่งนี้ไม่เกี่ยวข้องกับโปรไฟล์ SSH คุณสามารถกำหนดค่าเซิร์ฟเวอร์ SSH ให้ใช้ PowerShell เป็นเชลล์เริ่มต้นและโหลดโปรไฟล์ผ่าน SSH ได้ ดูเอกสารประกอบ SSH สำหรับข้อมูลเพิ่มเติมก่อน PowerShell 7.1 การดำเนินการระยะไกลผ่าน SSH ไม่รองรับเซสชันระยะไกลแบบ Second-hop ความสามารถนี้จำกัดเฉพาะเซสชันที่ใช้ WinRM PowerShell 7.1 อนุญาตให้
Enter-PSSessionและEnter-PSHostProcessทำงานจากภายในเซสชันระยะไกลแบบโต้ตอบใดๆ
ดูเพิ่มเติม
- การติดตั้ง PowerShell บน Linux
- การติดตั้ง PowerShell บน macOS
- การติดตั้ง PowerShell บน Windows
- จัดการ Windows ด้วย OpenSSH
- การจัดการคีย์ OpenSSH
- อูบุนตู SSH