OpenSSH Server: เปิด SSH บน Windows Server ล็อกอินด้วยคีย์

เปิด OpenSSH Server บน Windows Server 2019/2022/2025 ตั้ง PowerShell เป็นเชลล์เริ่มต้น ล็อกอินด้วยคีย์แทนรหัสผ่าน และตั้งสิทธิ์ไฟล์คีย์ของแอดมินให้ถูกต้อง

โดย ทีมงาน THAI DATA CLOUD อัปเดต อ่าน 14 นาที

แชร์FacebookXLINELinkedIn
OpenSSH Server — OpenSSH Server: เปิด SSH บน Windows Server ล็อกอินด้วยคีย์
OpenSSH Server: เปิด SSH บน Windows Server ล็อกอินด้วยคีย์

คำตอบสั้น ๆ: เปิด OpenSSH Server บน Windows Server 2019/2022/2025 ตั้ง PowerShell เป็นเชลล์เริ่มต้น ล็อกอินด้วยคีย์แทนรหัสผ่าน และตั้งสิทธิ์ไฟล์คีย์ของแอดมินให้ถูกต้อง

คู่มือนี้อธิบาย OpenSSH Server ทีละขั้นตอน พร้อมคำสั่งที่ใช้ได้จริงและปัญหาที่พบบ่อย

OpenSSH Server บน Windows Server คือบริการ SSH ที่ Microsoft รวมมาให้ในระบบตั้งแต่ Windows Server 2019 ช่วยให้คุณสั่งงานเซิร์ฟเวอร์ผ่านบรรทัดคำสั่ง คัดลอกไฟล์ด้วย scp หรือ sftp และรันสคริปต์ deploy จากเครื่อง Linux, macOS หรือ Windows ได้โดยไม่ต้องเปิดหน้าจอ Remote Desktop เหมาะกับผู้ดูแลที่ต้องจัดการหลายเครื่อง และระบบ CI/CD ที่ต้องส่งงานขึ้นเซิร์ฟเวอร์ Windows

เมื่อทำครบทุกขั้นตอน คุณจะได้บริการ sshd ที่เริ่มทำงานเองทุกครั้งที่บูต เปิดพอร์ต 22 ให้เฉพาะ IP ที่ไว้ใจ เข้าแล้วได้ PowerShell ทันที และล็อกอินด้วยคีย์แทนรหัสผ่าน ซึ่งลดความเสี่ยงจากการเดารหัสผ่านได้มากกว่าการเปิด RDP ออกสู่อินเทอร์เน็ต

แผนภาพการเชื่อมต่อจากเครื่องผู้ดูแลผ่านไฟร์วอลล์พอร์ต 22 ไปยัง OpenSSH Server ที่ตรวจคีย์แล้วเปิด PowerShell
ทุกการเชื่อมต่อผ่านกฎไฟร์วอลล์ก่อนถึง sshd ซึ่งอ่านไฟล์คีย์ต่างกันตามชนิดบัญชี

สิ่งที่ต้องเตรียม (OpenSSH Server)

  • Cloud Server ที่ติดตั้ง Windows Server 2019, 2022 หรือ 2025 เช่น Cloud Windows Server
  • บัญชีในกลุ่ม Administrators และเปิด PowerShell แบบ Run as administrator ทุกครั้งที่รันคำสั่งในคู่มือนี้
  • เครื่องลูกข่ายที่มีคำสั่ง ssh ซึ่ง Windows 10/11, macOS และ Linux มีมาให้ในตัวแล้ว
  • IP สาธารณะของออฟฟิศหรือเครื่องที่จะเชื่อมต่อ เพื่อใช้จำกัดการเข้าถึงพอร์ต 22
  • ช่องทางเข้าเครื่องสำรอง เช่น Remote Desktop หรือ Console ของผู้ให้บริการ เผื่อแก้ค่าผิดแล้วเข้า SSH ไม่ได้

ขั้นตอนที่ 1: ติดตั้งหรือเปิดใช้ OpenSSH Server

บน Windows Server 2025 ระบบติดตั้ง OpenSSH Server มาให้แล้วแต่ยังปิดอยู่ เปิดได้ที่ Server Manager › Local Server แล้วคลิกค่าของ Remote SSH Access ให้เป็น Enabled จากนั้นไปต่อที่ขั้นตอนที่ 2 ได้เลย Microsoft แนะนำให้ใช้กลุ่ม OpenSSH Users ของเครื่องกำหนดว่าใครเข้าผ่าน SSH ได้บ้าง

บน Windows Server 2019 และ 2022 ต้องติดตั้งเป็น Optional Feature ก่อน ตรวจสถานะด้วยคำสั่งนี้

Get-WindowsCapability -Online | Where-Object Name -like 'OpenSSH*'

ถ้า OpenSSH.Server~~~~0.0.1.0 แสดง State เป็น NotPresent ให้ติดตั้งด้วยคำสั่งด้านล่าง ระบบจะดาวน์โหลดแพ็กเกจจาก Windows Update จึงต้องออกอินเทอร์เน็ตได้

Add-WindowsCapability -Online -Name OpenSSH.Server~~~~0.0.1.0

ผลลัพธ์ที่ถูกต้องคือ Online : True และ RestartNeeded : False หากถนัดหน้าจอ ให้พิมพ์ Optional features ในช่องค้นหาของ Start เลือก Add a feature แล้วค้นหา OpenSSH Server และกด Install

ขั้นตอนที่ 2: เริ่มบริการ sshd และจำกัด IP ที่ไฟร์วอลล์ (OpenSSH Server)

เริ่มบริการและตั้งให้เปิดเองหลังรีบูต แล้วตรวจกฎไฟร์วอลล์ที่ตัวติดตั้งสร้างไว้ให้

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

Get-NetFirewallRule -Name OpenSSH-Server-In-TCP | Select-Object Name, Enabled, Direction, Action
หน้าจอ PowerShell แสดงการติดตั้ง OpenSSH Server ด้วย Add-WindowsCapability และสถานะบริการ sshd เป็น Running
หลังติดตั้ง ให้ตั้ง sshd เป็น Automatic เพื่อให้บริการเปิดเองหลังรีบูต

กฎ OpenSSH-Server-In-TCP เปิดพอร์ต 22 ให้ทุก IP ตามค่าเริ่มต้น บอตบนอินเทอร์เน็ตจะเริ่มเดารหัสผ่านภายในไม่กี่นาที จึงควรจำกัดให้เหลือเฉพาะเครือข่ายที่ไว้ใจทันที

Set-NetFirewallRule -Name OpenSSH-Server-In-TCP -RemoteAddress 198.51.100.0/24, 203.0.113.25
Get-NetFirewallRule -Name OpenSSH-Server-In-TCP | Get-NetFirewallAddressFilter

หากเซิร์ฟเวอร์อยู่หลัง Security Group หรือไฟร์วอลล์ของคลาวด์ ต้องอนุญาตพอร์ต 22 จาก IP เดียวกันที่ชั้นนั้นด้วย ไม่เช่นนั้นการเชื่อมต่อจะค้างจนหมดเวลา ดูหลักการตั้งกฎเพิ่มเติมได้ใน คู่มือเปิด Port บน Windows Defender Firewall

ขั้นตอนที่ 3: ตั้ง PowerShell เป็นเชลล์เริ่มต้น

ค่าเริ่มต้นของ sshd บน Windows คือเปิด cmd.exe ให้ผู้ที่ล็อกอิน ซึ่งไม่สะดวกกับงานดูแลระบบสมัยใหม่ ตั้งค่า DefaultShell ใน Registry ให้ชี้ไปที่ PowerShell แทน

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

ถ้าติดตั้ง PowerShell 7 ไว้แล้วและต้องการใช้แทน ให้ใส่ค่าเป็น C:\Program Files\PowerShell\7\pwsh.exe ค่านี้มีผลกับการเชื่อมต่อครั้งถัดไป ไม่กระทบ session ที่เปิดค้างอยู่

ขั้นตอนที่ 4: ทดสอบล็อกอินด้วยรหัสผ่าน

จากเครื่องลูกข่าย ทดสอบด้วยบัญชีในเครื่องก่อน ครั้งแรกระบบจะแสดง fingerprint ของเซิร์ฟเวอร์ ให้ตรวจแล้วพิมพ์ yes

# บัญชีในเครื่อง
ssh [email protected]

# บัญชีโดเมนจาก PowerShell บน Windows
ssh corp\[email protected]

# บัญชีโดเมนจาก macOS หรือ Linux (ใส่เครื่องหมายคำพูดกัน backslash หาย)
ssh -l 'corp\somchai' 203.0.113.10

เมื่อเข้าได้จะเห็นพรอมต์ PS C:\Users\Administrator> ลองรัน hostname หรือ Get-ComputerInfo -Property OsName เพื่อยืนยันว่าอยู่บนเครื่องที่ถูกต้อง การทดสอบด้วยรหัสผ่านก่อนช่วยแยกปัญหาเครือข่ายออกจากปัญหาเรื่องคีย์

ขั้นตอนที่ 5: ตั้งค่าล็อกอินด้วยคีย์

สร้างคู่คีย์บนเครื่องลูกข่าย ตั้ง passphrase ด้วยเพื่อให้ไฟล์คีย์ที่หลุดออกไปใช้งานไม่ได้ทันที

ssh-keygen -t ed25519 -C "[email protected]"

จุดที่ทำให้คนตั้งค่าพลาดมากที่สุดคือไฟล์ sshd_config ของ Windows มีบล็อก Match Group administrators อยู่ท้ายไฟล์ ทำให้บัญชีที่อยู่ในกลุ่ม Administrators ใช้ไฟล์คีย์กลางของเครื่อง ไม่ใช่ไฟล์ในโปรไฟล์ของตัวเอง

ตารางเปรียบเทียบตำแหน่งและสิทธิ์ของไฟล์คีย์ OpenSSH Server ระหว่างบัญชีกลุ่ม Administrators กับผู้ใช้ทั่วไป
บัญชีแอดมินต้องใช้ไฟล์คีย์กลางของเครื่อง วางในโปรไฟล์ตัวเองจะไม่มีผล

บัญชีที่อยู่ในกลุ่ม Administrators

บนเซิร์ฟเวอร์ คัดลอกเนื้อหาของไฟล์ id_ed25519.pub มาวางในตัวแปร แล้วเขียนลงไฟล์คีย์กลางพร้อมตั้งสิทธิ์

$key = 'ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIExampleOnlyReplaceWithYourKey [email protected]'
Add-Content -Path "$env:ProgramData\ssh\administrators_authorized_keys" -Value $key
icacls.exe "$env:ProgramData\ssh\administrators_authorized_keys" /inheritance:r /grant "Administrators:F" /grant "SYSTEM:F"

ไฟล์นี้ต้องมีสิทธิ์เฉพาะ SYSTEM และ Administrators เท่านั้น ถ้ามีผู้ใช้อื่นมีสิทธิ์อยู่ sshd จะไม่ยอมอ่านไฟล์และกลับไปถามรหัสผ่านโดยไม่แจ้งเหตุผลบนหน้าจอ บน Windows ภาษาอื่นที่ชื่อกลุ่มไม่ใช่ภาษาอังกฤษ ให้ใช้ SID แทน คือ *S-1-5-32-544:F

บัญชีผู้ใช้ทั่วไป

ผู้ใช้ที่ไม่ได้อยู่ในกลุ่ม Administrators ใช้ไฟล์ C:\Users\ชื่อผู้ใช้\.ssh\authorized_keys ให้สร้างโฟลเดอร์ .ssh ในโปรไฟล์ของผู้ใช้นั้นแล้ววางคีย์หนึ่งบรรทัดต่อหนึ่งคีย์ จากนั้นทดสอบจากเครื่องลูกข่าย

ssh -i ~/.ssh/id_ed25519 [email protected]

ถ้าตั้งถูกต้อง ระบบจะถามเฉพาะ passphrase ของคีย์ ไม่ถามรหัสผ่านของ Windows

ขั้นตอนที่ 6: ปิดล็อกอินด้วยรหัสผ่านและจำกัดผู้ใช้

เมื่อทุกคนที่ต้องใช้ล็อกอินด้วยคีย์ได้แล้ว ให้ปิดการล็อกอินด้วยรหัสผ่านใน OpenSSH Server เปิดไฟล์คอนฟิกด้วย notepad C:\ProgramData\ssh\sshd_config แล้วเพิ่มบรรทัดเหล่านี้ ไว้เหนือ บล็อก Match Group administrators เพราะค่าที่อยู่ใต้ Match จะมีผลเฉพาะบัญชีที่ตรงเงื่อนไขเท่านั้น

PubkeyAuthentication yes
PasswordAuthentication no
AllowGroups administrators corp\sshusers

ชื่อผู้ใช้และกลุ่มใน AllowGroups ต้องเป็นตัวพิมพ์เล็กทั้งหมด กลุ่มโดเมนใช้รูปแบบ โดเมน\ชื่อกลุ่ม จากนั้นรีสตาร์ตบริการ

Restart-Service sshd

อย่าปิดหน้าต่างที่เชื่อมต่ออยู่ ให้เปิดหน้าต่างใหม่แล้วทดสอบล็อกอินด้วยคีย์ก่อน ถ้าเข้าไม่ได้ ยังแก้ค่ากลับได้จาก session เดิมหรือผ่าน Remote Desktop

ตรวจสอบว่า OpenSSH Server ทำงานถูกต้อง

ทุกการล็อกอินถูกบันทึกไว้ใน Event Viewer › Applications and Services Logs › OpenSSH › Operational ดูจาก PowerShell ได้ด้วยคำสั่งนี้

Get-WinEvent -LogName OpenSSH/Operational -MaxEvents 10 | Format-Table TimeCreated, Message -Wrap

รายการที่ขึ้นต้นด้วย Accepted publickey for แปลว่าล็อกอินด้วยคีย์สำเร็จ ถ้าเห็น Failed password จาก IP แปลกจำนวนมาก แปลว่ากฎไฟร์วอลล์ยังเปิดกว้างเกินไป

รายการตรวจความปลอดภัยของ OpenSSH Server ก่อนใช้งานจริง ทั้งบริการ กฎไฟร์วอลล์ ไฟล์คีย์ และการปิดรหัสผ่าน
ทำให้ครบทุกข้อสีเขียว และแก้ข้อสีแดงก่อนเปิดใช้งานกับทีม

ปัญหาที่พบบ่อยเกี่ยวกับ OpenSSH Server

ใส่คีย์แล้วแต่ระบบยังถามรหัสผ่านทุกครั้ง ต้องตรวจอะไร?

สาเหตุเกือบทั้งหมดมาจากสามเรื่อง บัญชีอยู่ในกลุ่ม Administrators แต่วางคีย์ไว้ในโปรไฟล์ผู้ใช้แทนไฟล์ administrators_authorized_keys สิทธิ์ของไฟล์มีผู้อื่นนอกจาก SYSTEM และ Administrators หรือไฟล์ถูกบันทึกเป็น UTF-16 จากคำสั่ง echo ... > ไฟล์ ของ Windows PowerShell 5.1 ให้เขียนไฟล์ใหม่ด้วย Add-Content แล้วรัน icacls ตามขั้นตอนที่ 5

Add-WindowsCapability ล้มเหลวด้วยรหัส 0x800f0954 แก้อย่างไร?

มักเกิดกับเครื่องที่รับอัปเดตจาก WSUS ทำให้ดึงแพ็กเกจ Optional Feature จาก Windows Update ไม่ได้ เปิดนโยบาย Specify settings for optional component installation and component repair ที่ Computer Configuration › Administrative Templates › System แล้วเลือกให้ดาวน์โหลดจาก Windows Update โดยตรง จากนั้นรันคำสั่งติดตั้งอีกครั้ง

เชื่อมต่อแล้วขึ้น Connection timed out ทั้งที่ sshd ทำงานอยู่ เกิดจากอะไร?

แพ็กเก็ตถูกทิ้งก่อนถึงเครื่อง ตรวจว่า IP ของคุณอยู่ในรายการ RemoteAddress ของกฎ OpenSSH-Server-In-TCP และเปิดพอร์ต 22 ที่ไฟร์วอลล์ของคลาวด์แล้ว ทดสอบจากเครื่อง Windows ด้วย Test-NetConnection 203.0.113.10 -Port 22 ถ้า TcpTestSucceeded เป็น False ปัญหาอยู่ที่เครือข่าย ไม่ใช่ที่ sshd

ผู้ใช้โดเมนล็อกอินไม่ได้หลังเพิ่ม AllowGroups ทำไม?

OpenSSH บน Windows เทียบชื่อกลุ่มแบบตัวพิมพ์เล็กในรูปแบบ โดเมน\กลุ่ม ถ้าพิมพ์ชื่อเป็นตัวใหญ่หรือใช้ชื่อ FQDN กฎจะไม่ตรงและบัญชีถูกปฏิเสธ แก้เป็นตัวพิมพ์เล็กแล้วรีสตาร์ต sshd จากนั้นดูข้อความปฏิเสธใน log OpenSSH/Operational เพื่อยืนยัน

เปิด SSH แล้วควรปิด Remote Desktop เลยหรือไม่?

ไม่จำเป็นต้องปิด แต่ควรจำกัด RDP ให้เข้าได้เฉพาะ IP ที่ไว้ใจเช่นเดียวกัน และเก็บไว้เป็นช่องทางสำรองเมื่อตั้งค่า SSH ผิด หากต้องเปิด RDP ต่อ ควรเปิด Account Lockout Policy เพื่อป้องกันการเดารหัสผ่านด้วย

ถ้าต้องการให้ช่วยวางระบบเข้าถึงเซิร์ฟเวอร์อย่างปลอดภัย หรือตั้ง OpenSSH Server ให้หลายเครื่องพร้อมกัน ติดต่อทีมงาน THAI DATA CLOUD ได้ทุกเมื่อ อ่านรายละเอียดเพิ่มเติมจาก เอกสาร OpenSSH for Windows ของ Microsoft Learn และ การใช้คีย์กับ OpenSSH บน Windows

สรุปขั้นตอน OpenSSH Server

ทบทวน OpenSSH Server ทั้งหมดตามลำดับ ก่อนนำไปใช้กับระบบจริง

  1. ติดตั้งหรือเปิดใช้ OpenSSH Server
  2. เริ่มบริการ sshd และจำกัด IP ที่ไฟร์วอลล์ (OpenSSH Server)
  3. ตั้ง PowerShell เป็นเชลล์เริ่มต้น
  4. ทดสอบล็อกอินด้วยรหัสผ่าน
  5. ตั้งค่าล็อกอินด้วยคีย์
  6. ปิดล็อกอินด้วยรหัสผ่านและจำกัดผู้ใช้

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

อ่านเพิ่มเติมเกี่ยวกับ OpenSSH Server

แชร์FacebookXLINELinkedIn

มีคำถามเรื่องบริการ? ติดต่อทีมงาน