ค้นหาเว็บไซต์

วิธีเปิดใช้งานและกำหนดค่าเซิร์ฟเวอร์ SSH บน Windows ด้วย OpenSSH


เซิร์ฟเวอร์ SSH ที่ใช้แพ็คเกจ OpenSSH เป็นส่วนหนึ่งของระบบปฏิบัติการใน Windows รุ่นใหม่ทั้งหมด ในบทความนี้ เราจะแสดงวิธีติดตั้งและกำหนดค่าเซิร์ฟเวอร์ OpenSSH บน Windows 10/11 และ Windows Server 2022/2019 และเชื่อมต่อกับระยะไกลผ่านการเชื่อมต่อ SSH ที่ปลอดภัย (เช่นเดียวกับใน Linux ?)

จะติดตั้งเซิร์ฟเวอร์ OpenSSH บน Windows ได้อย่างไร

แพ็คเกจ OpenSSH Server เป็นส่วนหนึ่งของ Windows 10 เวอร์ชันใหม่ทั้งหมด (เริ่มต้นด้วย 1803), Windows 11 และ Windows Server 2022/2019 เป็น ฟีเจอร์ตามความต้องการ (FoD) ในการติดตั้งเซิร์ฟเวอร์ OpenSSH ให้เปิดพรอมต์ PowerShell ที่ยกระดับแล้วเรียกใช้คำสั่ง:

Get-WindowsCapability -Online | Where-Object Name -like ‘OpenSSH.Server*’ | Add-WindowsCapability -Online 

หรือใช้ DISM:

dism /Online /Add-Capability /CapabilityName:OpenSSH.Server~~~~0.0.1.0

หากคอมพิวเตอร์ของคุณเชื่อมต่อโดยตรงกับอินเทอร์เน็ต แพ็คเกจ OpenSSH.Server จะถูกดาวน์โหลดและติดตั้งบน Windows

คุณยังสามารถติดตั้ง OpenSSH บน Windows 10/11 ผ่านแผง การตั้งค่า ที่ทันสมัย (การตั้งค่า -> แอปและคุณสมบัติ -> คุณสมบัติเสริม -> เพิ่มคุณสมบัติ) ค้นหา เปิดเซิร์ฟเวอร์ SSH ในรายการ แล้วคลิก ติดตั้ง

คุณยังสามารถติดตั้ง Remote Server Administration Tools (RSAT) ได้จากที่นี่

บนคอมพิวเตอร์ในสภาพแวดล้อมที่ขาดการเชื่อมต่อ (ออฟไลน์) คุณสามารถติดตั้งเซิร์ฟเวอร์ OpenSSH จากอิมเมจ ฟีเจอร์ตามความต้องการ ISO (มีอยู่ในบัญชีของคุณบนเว็บไซต์ Microsoft: MSDN หรือ my.visualstudio.com) ดาวน์โหลด ISO และแตกเนื้อหาไปยังโฟลเดอร์ E:\FOD (คุณสามารถแตกไฟล์ได้เท่านั้น

OpenSSH-Server-Package~31bf3856ad364e35~amd64~~.cab

) และติดตั้งคุณสมบัติ Windows จากที่เก็บในเครื่อง:

Add-WindowsCapability -Name OpenSSH.Server~~~~0.0.1.0 -Online -Source E:\FOD

ตัวติดตั้ง MSI สำหรับ OpenSSH สำหรับ Windows ยังมีอยู่ในที่เก็บอย่างเป็นทางการของ Microsoft บน GitHub (https://github.com/PowerShell/Win32-OpenSSH/releases/) ตัวอย่างเช่น สำหรับ Windows 10 x64 คุณต้องดาวน์โหลดและติดตั้งแพ็คเกจ OpenSSH-Win64-v8.9.1.0.msi คำสั่ง PowerShell ต่อไปนี้จะดาวน์โหลดไฟล์ MSI และติดตั้งไคลเอนต์และเซิร์ฟเวอร์ OpenSSH บนคอมพิวเตอร์ของคุณ:

Invoke-WebRequest https://github.com/PowerShell/Win32-OpenSSH/releases/download/v8.9.1.0p1-Beta/OpenSSH-Win64-v8.9.1.0.msi -OutFile $HOME\Downloads\OpenSSH-Win64-v8.9.1.0.msi -UseBasicParsing
msiexec /i $HOME\Downloads\OpenSSH-Win64-v8.9.1.0.msi

คุณสามารถติดตั้งเซิร์ฟเวอร์ OpenSSH ใน Windows รุ่นก่อนหน้าได้เช่นกัน (Windows 8.1, Windows Server 2016/2012R2/2012) ตรวจสอบตัวอย่างการติดตั้งและกำหนดค่า Win32-OpenSSH ในบทความ “How to Configure SFTP Server (SSH FTP) on Windows? ".

เพื่อให้แน่ใจว่าเซิร์ฟเวอร์ OpenSSH ได้รับการติดตั้งแล้ว ให้รันคำสั่ง:

Get-WindowsCapability -Online | ? Name -like 'OpenSSH.Ser*'
State : Installed

การกำหนดค่าเซิร์ฟเวอร์ SSH บน Windows

หลังจากติดตั้งเซิร์ฟเวอร์ OpenSSH บน Windows แล้ว จะมีการเพิ่มบริการสองรายการ:

  • ssh-agent (OpenSSH Authentication Agent) - สามารถใช้เพื่อจัดการคีย์ส่วนตัวหากคุณได้กำหนดค่าการตรวจสอบสิทธิ์คีย์ SSH

  • sshd (เซิร์ฟเวอร์ OpenSSH SSH)

คุณต้องเปลี่ยนประเภทการเริ่มต้นของบริการ sshd เป็นอัตโนมัติและเริ่มบริการโดยใช้ PowerShell:

Set-Service -Name sshd -StartupType 'Automatic'
Start-Service sshd

ใช้คำสั่ง netstat เพื่อให้แน่ใจว่าเซิร์ฟเวอร์ SSH กำลังทำงานและรอการเชื่อมต่อบนพอร์ต TCP 22:

netstat -na| find ":22"

ตรวจสอบให้แน่ใจว่าไฟร์วอลล์ Windows Defender อนุญาตการเชื่อมต่อขาเข้ากับ Windows ผ่านพอร์ต TCP 22:

Get-NetFirewallRule -Name *OpenSSH-Server* |select Name, DisplayName, Description, Enabled
Name DisplayName Description Enabled
---- ----------- ----------- -------
OpenSSH-Server-In-TCP OpenSSH SSH Server (sshd) Inbound rule for OpenSSH SSH Server (sshd) True

ถ้ากฎถูกปิดใช้งาน (Enabled=False) หรือหายไป คุณสามารถสร้างกฎขาเข้าใหม่ได้โดยใช้ New-NetFirewallRule cmdlet:

New-NetFirewallRule -Name sshd -DisplayName 'OpenSSH Server (sshd)' -Enabled True -Direction Inbound -Protocol TCP -Action Allow -LocalPort 22

ตามค่าเริ่มต้น ส่วนประกอบหลักของ OpenSSH จะอยู่ในโฟลเดอร์เหล่านี้:

  • ไฟล์เรียกทำงานของเซิร์ฟเวอร์ OpenSSH:

    C:\Windows\System32\OpenSSH\

    (sshd.exe, ssh.exe, ssh-keygen.exe, sftp.exe เป็นต้น)

  • ไฟล์ sshd_config (สร้างขึ้นหลังจากการเริ่มบริการครั้งแรก):

    C:\ProgramData\ssh
  • ไฟล์และคีย์ที่ได้รับอนุญาตสามารถเก็บไว้ในโฟลเดอร์โปรไฟล์ผู้ใช้:

    %USERPROFILE%\.ssh\

Sshd_config: ไฟล์การกำหนดค่าเซิร์ฟเวอร์ OpenSSH

คุณสามารถเปลี่ยนการตั้งค่าเซิร์ฟเวอร์ OpenSSH ได้ในไฟล์กำหนดค่า:

%programdata%\ssh\sshd_config

. นี่คือไฟล์ข้อความล้วนที่มีชุดคำสั่ง คุณสามารถใช้โปรแกรมแก้ไขข้อความใดก็ได้ในการแก้ไข:

start-process notepad C:\Programdata\ssh\sshd_config

ตัวอย่างเช่น หากต้องการปฏิเสธการเชื่อมต่อ SSH สำหรับบัญชีผู้ใช้ของโดเมนเฉพาะ (หรือผู้ใช้ทั้งหมดในโดเมนที่ระบุ) ให้เพิ่มคำสั่งเหล่านี้ที่ส่วนท้ายของไฟล์:

DenyUsers a-d\admin@192.168.1.10
DenyUsers corp\*

หากต้องการอนุญาตการเชื่อมต่อ SSH กับกลุ่มความปลอดภัยเฉพาะของโดเมนเท่านั้น:

AllowGroups a-d\sshadmins

คุณสามารถอนุญาตให้เข้าถึงกลุ่มผู้ใช้ภายใน:

AllowGroups sshadmins

ตามค่าเริ่มต้น ผู้ใช้ Windows ทุกคนสามารถเชื่อมต่อกับ OpenSSH ได้ คำสั่งในไฟล์ sshd_config ได้รับการประมวลผลตามลำดับต่อไปนี้: DenyUsers, AllowUsers, DenyGroups, AllowGroups

คุณสามารถปฏิเสธการเข้าสู่ระบบ SSH สำหรับบัญชีที่มีสิทธิ์ของผู้ดูแลระบบ ในกรณีนี้ หากคุณต้องการดำเนินการพิเศษใดๆ ในเซสชัน SSH ของคุณ คุณจะต้องใช้ runas

DenyGroups Administrators

คำสั่งต่อไปนี้อนุญาตให้คุณเข้าถึง Windows โดยใช้คีย์ส่วนตัว SSH หรือรหัสผ่าน

PubkeyAuthentication yes
PasswordAuthentication yes

คุณสามารถเปลี่ยนพอร์ต TCP/22 เริ่มต้นที่ยอมรับการเชื่อมต่อเซิร์ฟเวอร์ OpenSSH ในไฟล์การกำหนดค่า sshd_config โดยใช้คำสั่ง พอร์ต

หลังจากทำการเปลี่ยนแปลงใดๆ กับไฟล์ sshd_config คุณต้องเริ่มบริการ sshd ใหม่

restart-service sshd

จะเชื่อมต่อกับคอมพิวเตอร์ Windows ระยะไกลผ่าน SSH ได้อย่างไร

ตอนนี้คุณสามารถลองเชื่อมต่อกับคอมพิวเตอร์ Windows 10 ของคุณโดยใช้ไคลเอนต์ SSH (ฉันใช้สีโป๊วในตัวอย่างนี้)

คุณสามารถใช้ไคลเอนต์ Windows SSH ในตัวเพื่อเชื่อมต่อกับโฮสต์ระยะไกล เมื่อต้องการทำเช่นนี้ ให้เปิดพรอมต์คำสั่งและเรียกใช้คำสั่งต่อไปนี้:

ssh max@192.168.13.12

ในตัวอย่างนี้ max คือชื่อผู้ใช้บนคอมพิวเตอร์ Windows ระยะไกล และ 192.168.13.12 คือที่อยู่ IP หรือชื่อ DNS ของคอมพิวเตอร์

โปรดทราบว่าคุณสามารถใช้รูปแบบชื่อผู้ใช้ต่อไปนี้เมื่อเชื่อมต่อกับ Windows ผ่าน SSH:

  • max@server1

    - ผู้ใช้ Windows ในเครื่อง

  • max@a-d.site@server1

    - ผู้ใช้ Active Directory หรือบัญชี Microsoft/Azure (ใช้รูปแบบ UserPrincipalName)

  • a-d\max@server1

    - รูปแบบชื่อ NetBIOS

ในโดเมน Active Directory คุณสามารถใช้การรับรองความถูกต้อง Kerberos ใน SSH ในการทำเช่นนี้ คุณต้องเปิดใช้งานคำสั่งต่อไปนี้ใน sshd_config:

GSSAPIAuthentication yes

ตอนนี้คุณสามารถเชื่อมต่อกับเซิร์ฟเวอร์ SSH ได้อย่างโปร่งใสจากเครื่อง Windows ที่เข้าร่วมโดเมนด้วยเซสชันผู้ใช้โดเมน ในกรณีนี้ จะไม่มีการร้องขอรหัสผ่านของผู้ใช้ และการตรวจสอบสิทธิ์ SSO ผ่าน Kerberos จะดำเนินการ:

ssh -K server1

ครั้งแรกที่คุณเชื่อมต่อ คุณจะได้รับแจ้งให้เพิ่มโฮสต์ในรายการโฮสต์ SSH ที่รู้จัก (

C:\Users\your_user\.ssh\known_hosts

).

คลิก

Yes

และเข้าสู่ระบบภายใต้บัญชีผู้ใช้ Windows ของคุณ

หากการเชื่อมต่อ SSH สำเร็จ คุณจะเห็นพรอมต์ของเชลล์ cmd.exe

admin@win10pc C:\Users\admin>

คุณสามารถเรียกใช้คำสั่ง สคริปต์ และแอปต่างๆ ในพรอมต์คำสั่ง SSH

ฉันชอบทำงานในคอนโซล PowerShell มากกว่า ในการเริ่มต้นให้เรียกใช้:

powershell.exe

ในการเปลี่ยนเชลล์ cmd.exe เริ่มต้นใน OpenSSH เป็น PowerShell ให้ทำการเปลี่ยนแปลงรีจิสทรีโดยใช้คำสั่ง PowerShell ต่อไปนี้:

New-ItemProperty -Path "HKLM:\SOFTWARE\OpenSSH" -Name DefaultShell -Value "C:\Windows\System32\WindowsPowerShell\v1.0\powershell.exe" -PropertyType String -Force

เริ่มการเชื่อมต่อ SSH ของคุณใหม่ และตรวจสอบให้แน่ใจว่าตอนนี้ PowerShell ถูกใช้เป็นเชลล์ SSH เริ่มต้น (ซึ่งระบุโดยพรอมต์

PS C:\Users\admin>

).

พรอมต์ PowerShell เริ่มต้นขึ้นในเซสชัน SSH ของฉัน โดยที่ฟังก์ชันปกติทำงาน: การเติมข้อความอัตโนมัติของแท็บ การเน้นไวยากรณ์ PSReadLine ประวัติคำสั่ง ฯลฯ หากผู้ใช้ปัจจุบันเป็นสมาชิกของกลุ่มผู้ดูแลระบบภายใน คำสั่งเซสชันทั้งหมดจะถูกดำเนินการโดยยกระดับ หากเปิดใช้งาน UAC

เซิร์ฟเวอร์ OpenSSH บน Windows สามารถใช้ในสถานการณ์การขุดอุโมงค์ SSH ต่างๆ

ตรวจสอบบันทึกการเชื่อมต่อ SSH ใน Windows

ตามค่าเริ่มต้นในบันทึกการเชื่อมต่อเซิร์ฟเวอร์ Windows SSH จะไม่เขียนลงในไฟล์ข้อความ แต่เขียนลงในบันทึกเหตุการณ์แยกต่างหากผ่านการติดตามเหตุการณ์สำหรับ Windows (ETW) เปิดคอนโซลตัวแสดงเหตุการณ์ (

eventvwr.msc

) และไปที่ บันทึกแอปพลิเคชันและบริการ -> OpenSSH -> การปฏิบัติงาน

หากคุณเชื่อมต่อกับเซิร์ฟเวอร์ SSH สำเร็จโดยใช้รหัสผ่าน เหตุการณ์จะปรากฏในบันทึก:

EventID: 4
sshd: Accepted password for root from 192.168.1.53 port 65749 ssh2

หากดำเนินการตรวจสอบคีย์ SSH คุณจะเห็นเหตุการณ์ต่อไปนี้:

sshd: Accepted publickey for locadm from 192.168.1.53 port 61426 
ssh2: ED25519 SHA256:FEHDEC/G42FS23209C2KMb4335923pigN31s3qMK322lGibD

หากคุณต้องการให้บันทึกการเชื่อมต่อ SSH เขียนลงในไฟล์ข้อความในเครื่อง คุณต้องเปิดใช้งานพารามิเตอร์ต่อไปนี้ในไฟล์ sshd_config:

SyslogFacility LOCAL0
LogLevel INFO

เริ่มบริการ sshd ใหม่และตรวจสอบให้แน่ใจว่าตอนนี้บันทึกเซิร์ฟเวอร์ SSH ถูกเขียนไปยังไฟล์ข้อความธรรมดา C:\ProgramData\ssh\logs\sshd.log

คุณสามารถใช้การเชื่อมต่อ SSH ที่ปลอดภัยกับ PSRemoting เพื่อจัดการคอมพิวเตอร์ระยะไกลผ่าน WinRM

บทความที่เกี่ยวข้อง