อธิบายไคลเอ็นต์ PowerShell SSH และ Remoting
คุณจำเป็นต้องจัดการเซิร์ฟเวอร์ระยะไกลหรืออุปกรณ์เครือข่ายหรือไม่? ถ้าอย่างนั้นคุณอาจใช้ SSH เพื่อเชื่อมต่อและจัดการมัน โปรโตคอล SSH ช่วยให้คุณเชื่อมต่ออย่างปลอดภัยกับอุปกรณ์ระยะไกลผ่านเครือข่ายที่ไม่ปลอดภัย (อินเทอร์เน็ต) หากต้องการใช้ SSH คนส่วนใหญ่ใช้เครื่องมือไคลเอ็นต์ SSH เช่น Putty แต่คุณรู้หรือไม่ว่า PowerShell มีไคลเอ็นต์ SSH ในตัว
ไคลเอนต์ PowerShell SSH ถูกเปิดใช้งานตามค่าเริ่มต้นใน Windows 10 1809 และสูงกว่า ซึ่งหมายความว่าขณะนี้คุณสามารถเชื่อมต่อกับอุปกรณ์ระยะไกลได้อย่างง่ายดายจากเครื่องมือบรรทัดคำสั่งที่คุณชื่นชอบ
นอกจากนี้เรายังสามารถใช้ SSH ใน PowerShell เพื่อจัดการเครื่อง Windows อื่นจากระยะไกลได้ แต่คุณจะต้องใช้ PowerShell 6 หรือสูงกว่าเพื่อเรียกใช้เซิร์ฟเวอร์ SSH
ไคลเอนต์ PowerShell SSH
วิธีทั่วไปในการใช้ SSH ใน PowerShell คือในฐานะไคลเอ็นต์ SSH สมมติว่าคุณทำให้ Windows ของคุณทันสมัยอยู่เสมอ คุณควรเปิดใช้งาน SSH เป็นค่าเริ่มต้น คุณสามารถตรวจสอบได้โดยเปิด PowerShell แล้วพิมพ์คำสั่งต่อไปนี้:
# type ssh and press enter
ssh
# Result:
usage: ssh [-46AaCfGgKkMNnqsTtVvXxYy] [-B bind_interface]
[-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]] destination [command]เมื่อเปิด PowerShell คุณสามารถเชื่อมต่อกับเซิร์ฟเวอร์ระยะไกลหรืออุปกรณ์เครือข่ายด้วยคำสั่งเดียว:
ssh <username>@<host_ip_address>
# For example:
ssh pi@192.168.1.210
คุณยังสามารถใช้ชื่อโฮสต์แทนที่อยู่ IP ได้ หากคุณไม่ระบุชื่อผู้ใช้ บัญชีผู้ใช้ภายในของคุณจะถูกใช้
เมื่อคุณกด Enter คุณจะต้องป้อนรหัสผ่านของผู้ใช้ SSH เมื่อคุณเชื่อมต่อกับอุปกรณ์เป็นครั้งแรก คุณจะต้องยอมรับรหัสของโฮสต์ เพียงกด Enter หรือพิมพ์ใช่
หากคุณมี SSH ทำงานบนพอร์ตอื่นที่ไม่ใช่พอร์ตเริ่มต้น 22 คุณสามารถเปลี่ยนหมายเลขพอร์ตได้โดยใช้แฟล็ก -P:
ssh <username>@<host_ip_address> -P <port_number>
# For example
ssh pi@192.168.1.210 -P 1022PowerShell SSH Keygen
เซิร์ฟเวอร์หรือบริการระยะไกลบางแห่งอนุญาตให้เข้าถึง SSH โดยใช้คีย์ SSH เท่านั้น คุณจะต้องสร้างคีย์ SSH ในเครื่องและอัปโหลดคีย์ไปยังเซิร์ฟเวอร์ (หรือบริการ) เพื่อให้สามารถยืนยันคุณและสร้างการเชื่อมต่อที่ปลอดภัย
คีย์ SSH มีอยู่จากคีย์ส่วนตัวและสาธารณะ คุณจะต้องเก็บคีย์ส่วนตัวไว้ในเครื่องของคุณ (และตรวจสอบให้แน่ใจว่าคุณเก็บไว้กับตัวเอง) และคีย์สาธารณะจะถูกอัปโหลดไปยังเซิร์ฟเวอร์
PowerShell มีคีย์เจน SSH ในตัวที่คุณสามารถใช้เพื่อสร้างคีย์ใหม่ได้ พิมพ์คำสั่งต่อไปนี้เพื่อสร้างคีย์:
ssh-keygen -t Ed25519
# Result
Generating public/private Ed25519 key pair.
Enter file in which to save the key (C:\Users\lazyadmin/.ssh/id_ed25519): <press enter>
# It will ask for apassphrase, you can leave it empty - see below for more details
Enter passphrase (empty for no passphrase):
Enter same passphrase again:
# Generated key
Your identification has been saved in C:\Users\lazyadmin/.ssh/id_ed25519.
Your public key has been saved in C:\Users\lazyadmin/.ssh/id_ed25519.pub.
The key fingerprint is:
SHA256:1232131+ASdi123SscvBbwn9Qfxj0 lazyadmin@lab01
The key's randomart image is:
+--[ED25519 256]--+
| .o . |
|..o+ . |
|o..o . o |
|+..# o . |
|=.+ =...S. |
|.+.C.+. + E |
|. *o@OO O. . |
| = O*o . |
|. +++. |
+----[SHA256]-----+ตัวเลือก -t Ed25519 เป็นอัลกอริทึมใหม่ที่ใช้ในการสร้างคีย์ ในระบบเดิมอาจไม่รองรับสิ่งนี้ จากนั้นคุณสามารถใช้ระบบเข้ารหัส RSA รุ่นเก่าได้
ssh-keygen -b 4096 -t RSAกุญแจจะถูกเก็บไว้ในโปรไฟล์ผู้ใช้ของคุณ เส้นทางจะแสดงอยู่ในเอาต์พุต แต่โดยทั่วไปแล้ว เส้นทางเหล่านั้นจะถูกบันทึกไว้ในตำแหน่งต่อไปนี้:
%userprofile%\.sshข้อความรหัสผ่าน SSH Keygen
ในระหว่างการสร้างคีย์ ssh คุณจะถูกขอให้ป้อนข้อความรหัสผ่านหรือปล่อยว่างไว้ (ค่าเริ่มต้น) ข้อความรหัสผ่านใช้ในการเข้ารหัสคีย์ท้องถิ่น วิธีนี้ทำให้คุณสามารถจัดเก็บคีย์ภายในเครื่องได้อย่างปลอดภัย หากใครสามารถเข้าถึงกุญแจได้ พวกเขาจะไม่สามารถใช้มันได้หากไม่มีข้อความรหัสผ่าน
แต่ก่อนที่คุณจะใช้ข้อความรหัสผ่าน มีสิ่งสำคัญสิ่งหนึ่งที่คุณต้องจำไว้ คุณจะต้องป้อนข้อความรหัสผ่านทุกครั้งที่คุณใช้คีย์ SSH โดยส่วนใหญ่คีย์ SSH จะถูกนำมาใช้ในระบบอัตโนมัติ เช่น บริการ GitHub เป็นต้น ในกรณีการใช้งานเหล่านั้น การใช้ข้อความรหัสผ่านไม่ใช่ทางเลือก
การเชื่อมต่อระยะไกล PowerShell กับ SSH
นอกจากนี้เรายังสามารถใช้ SSH ใน PowerShell เพื่อสร้างการเชื่อมต่อระยะไกลไปยังคอมพิวเตอร์หรือเซิร์ฟเวอร์เครื่องอื่น ซึ่งอาจอยู่ระหว่างคอมพิวเตอร์ Windows หรือ Windows-Linux และในทางกลับกัน
การสร้างเซสชันระยะไกล PowerShell ระหว่างเครื่อง Windows สองเครื่องสามารถทำได้ด้วย WinRM อยู่แล้ว แต่ตอนนี้คุณสามารถใช้ SSH เพื่อสร้างการเชื่อมต่อได้แล้ว ข้อดีของ SSH คือคุณสามารถใช้บน Windows, Linux และ macOS
คุณจะต้องใช้ PowerShell 6 หรือสูงกว่าเพื่อใช้ SSH สำหรับการเชื่อมต่อระยะไกลระหว่างเครื่อง Windows และ Linux ฉันใช้ PowerShell 7 ในตัวอย่างด้านล่าง
ติดตั้งเซิร์ฟเวอร์ OpenSSH
ขั้นตอนแรกคือการติดตั้ง เซิร์ฟเวอร์ OpenSSH บนคอมพิวเตอร์ Windows ของคุณ ตามที่กล่าวไว้ ขณะนี้ไคลเอ็นต์ SSH ได้รับการติดตั้งและเปิดใช้งานตามค่าเริ่มต้นแล้ว แต่เซิร์ฟเวอร์ SSH ไม่ใช่
คุณสามารถตรวจสอบว่าเซิร์ฟเวอร์ OpenSSH ได้รับการติดตั้งด้วย cmdlet ด้านล่างหรือไม่:
Get-WindowsCapability -Online | ? Name -like 'OpenSSH*'
# Result:
Name : OpenSSH.Client~~~~0.0.1.0
State : Installed
Name : OpenSSH.Server~~~~0.0.1.0
State : NotPresentอย่างที่คุณเห็นไม่มีเซิร์ฟเวอร์ OpenSSH เราสามารถติดตั้ง/เปิดใช้งานด้วย PowerShell:
Add-WindowsCapability -Online -Name OpenSSH.Server~~~~0.0.1.0ขั้นตอนต่อไปคือการเริ่มเซิร์ฟเวอร์ OpenSSH เนื่องจากเป็นบริการที่เราสามารถตั้งค่าให้เริ่มโดยอัตโนมัติ:
# Start the sshd service
Start-Service sshd
# Set the service to automatic start
Set-Service sshd -StartupType Automaticกำหนดค่าเซิร์ฟเวอร์ SSH
เราจำเป็นต้องแก้ไขไฟล์การกำหนดค่า SSHD เพื่อให้เราสามารถตรวจสอบสิทธิ์ด้วยรหัสผ่านและใช้ PowerShell บนเครื่องระยะไกลได้
หากเราไม่ได้กำหนดค่าเซิร์ฟเวอร์ SSH เราจะสามารถใช้คำสั่งพื้นฐานบนเครื่องระยะไกลเท่านั้น (Windows Shell Prompt)
หากต้องการใช้ PowerShell cmdlets ทั้งหมดอย่างสมบูรณ์ เราจะต้องกำหนดค่าเซิร์ฟเวอร์ SSH เพื่อเพิ่ม PowerShell เป็นระบบย่อย
ไฟล์การกำหนดค่า SSHD จะถูกจัดเก็บไว้ในโฟลเดอร์ programdata เนื่องจากเราเปิด PowerShell ไว้แล้ว เราจะใช้มันเพื่อเปิดไฟล์การกำหนดค่า:
# Change the directory to the programdata folder> ssh
cd $env:ProgramData\ssh
# Open the configuration file in notepad
PS C:\ProgramData\ssh> notepad .\sshd_configในไฟล์การกำหนดค่า ลบ # หน้าบรรทัด PasswordAuthentication yes และเพิ่มบรรทัดต่อไปนี้ในไฟล์การกำหนดค่า (ตำแหน่งไม่สำคัญ แต่ฉันได้เพิ่มไว้ด้านล่างส่วน “# override default of no subsystems”)
Subsystem powershell c:/progra~1/powershell/7/pwsh.exe -sshs -NoLogo -NoProfileเริ่มบริการ SSHD ใหม่เพื่อโหลดไฟล์การกำหนดค่าใหม่:
Restart-service sshdระยะไกล SSH ด้วย PowerShell
เมื่อติดตั้งเซิร์ฟเวอร์ SSH บนเซิร์ฟเวอร์ของเราแล้ว ตอนนี้เราสามารถเชื่อมต่อกับเซิร์ฟเวอร์ได้โดยใช้ PowerShell บนไคลเอนต์ของเรา เราสามารถใช้ cmdlet เดียวกันกับการใช้ระยะไกลของ WinRM ความแตกต่างอยู่ที่ชื่อโฮสต์และชื่อคอมพิวเตอร์
- ใหม่-PSSession
- เข้าสู่ PSSession
- เรียกใช้คำสั่ง
หากคุณใช้ New-PSSession -Computername โปรโตคอล WinRM จะถูกนำมาใช้ เมื่อคุณใช้พารามิเตอร์ -hostname แทน SSH จะถูกนำมาใช้
คุณสามารถเริ่มเซสชันระยะไกลของ PowerShell ใหม่ได้ดังนี้:
# Directly open a remoting session
Enter-PSSession -HostName la-srv-lab01 -UserName admin
# Create a new session
$session = New-PSSession -HostName la-srv-lab01 -UserName admin
# Invoke a command on the remote machine
Invoke-Command -Session $session -ScriptBlock {Get-Process -Name "Explorer"}
# Result:
NPM(K) PM(M) WS(M) CPU(s) Id SI ProcessName PSComputerName
------ ----- ----- ------ -- -- ----------- -------------
517 49,78 122,99 24,83 3532 1 explorer la-srv-lab01
นอกจากนี้ โปรดทราบว่าเราใช้พารามิเตอร์ -ชื่อผู้ใช้ แทน -Credentials เช่นเดียวกับวิธี WinRM
เราสามารถเรียกใช้คำสั่ง PowerShell ระยะไกลด้วย Intake-Command cmdlet หรือเปิด PowerShell บนเซิร์ฟเวอร์ด้วย Enter-PSSession
การจัดการการเชื่อมต่อ SSH หลายรายการ
ข้อดีของเครื่องมืออย่าง Putty คือคุณสามารถจัดการและบันทึกการเชื่อมต่อ SSH ของคุณได้ สิ่งนี้ทำให้คุณสามารถเชื่อมต่อกับเซิร์ฟเวอร์หรืออุปกรณ์เครือข่ายที่คุณใช้บ่อยอีกครั้งได้อย่างง่ายดาย
ด้วย Windows Terminal คุณสามารถบรรลุสิ่งเดียวกันได้ Windows Terminal ใหม่ช่วยให้คุณจัดเก็บการเชื่อมต่อต่างๆ ได้อย่างง่ายดาย และใช้อินเทอร์เฟซบรรทัดคำสั่งที่แตกต่างกัน
หากคุณต้องการทราบข้อมูลเพิ่มเติมเกี่ยวกับ Winows Terminal โปรดอ่านบทความนี้ซึ่งฉันจะอธิบายรายละเอียดทั้งหมดเกี่ยวกับเทอร์มินัลอันทรงพลังนี้
ห่อขึ้น
การใช้ SSH กับ PowerShell นั้นสะดวกมากและไม่จำเป็นต้องใช้เครื่องมือพิเศษ (ไคลเอนต์ SSH) โดยส่วนตัวแล้วฉันใช้ PowerShell บ่อยครั้ง ดังนั้นเมื่อฉันต้องตรวจสอบหรือทำอะไรบางอย่างบนเซิร์ฟเวอร์ การเชื่อมต่ออย่างรวดเร็วจากหน้าต่าง PowerShell ของฉันจึงเป็นเรื่องง่ายมาก
ฉันหวังว่าบทความนี้จะมีประโยชน์ หากคุณมีคำถามใด ๆ โปรดแสดงความคิดเห็นด้านล่าง




