ก่อนหน้านี้ หากคุณต้องการใช้ SSH บน Windows คุณจะต้องพึ่งพาไคลเอ็นต์ของบุคคลที่สาม เช่น PuTTY หรือติดตั้งแพ็คเกจเซิร์ฟเวอร์ SSH จากแหล่งที่มาที่คล้ายกัน
อย่างไรก็ตาม การอัปเดตเดือนเมษายน 2018 (เวอร์ชัน 1803) แนะนำ OpenSSH เป็นคุณสมบัติในตัว ตราบใดที่คุณใช้ Windows เวอร์ชันที่รองรับ คุณสามารถติดตั้งไคลเอนต์ OpenSSH และคอมโพเนนต์เซิร์ฟเวอร์เป็นคุณสมบัติเสริมได้
ด้วยเหตุนี้ เราจะกล่าวถึงข้อกำหนดเบื้องต้น ขั้นตอนทั้งหมดเพื่อติดตั้ง OpenSSH โดยใช้วิธีการต่างๆ และวิธีเริ่มต้นในบทความนี้
วิธีติดตั้ง OpenSSH
ก่อนเริ่มต้น คุณต้องแน่ใจว่าเป็นไปตามข้อกำหนดต่อไปนี้:
คุณสมบัติเสริม (GUI)
วิธีที่ง่ายที่สุดในการติดตั้ง OpenSSH บน Windows คือจากหน้าคุณสมบัติเสริมในการตั้งค่า Windows
กด Win + I แล้วไปที่ แอป > คุณสมบัติเสริม. คลิกดูคุณลักษณะในส่วนเพิ่มคุณลักษณะเพิ่มเติม
เลือก ไคลเอนต์ OpenSSH และ เซิร์ฟเวอร์ OpenSSH จากรายการ แล้วกด ถัดไป > ติดตั้ง
หลังจากติดตั้งส่วนประกอบแล้ว ให้กด Win + R พิมพ์ services.msc แล้วกด Enter ค้นหาบริการ OpenSSH SSH Server และ OpenSSH Authentication Agent ที่นี่
ดับเบิลคลิกและ เริ่ม บริการเหล่านี้ หากต้องการ คุณสามารถเปลี่ยนประเภทการเริ่มต้นเป็น อัตโนมัติ บันทึกการเปลี่ยนแปลงในภายหลัง
จากนั้นกด Win + R พิมพ์ wf.msc แล้วกด Enter ในส่วนกฎขาเข้า ตรวจสอบให้แน่ใจว่าได้เปิดใช้งานกฎ OpenSSH SSH Server (sshd) แล้ว
การตั้งค่าพื้นฐานเสร็จสมบูรณ์ ตรวจสอบส่วนเริ่มต้นใช้งาน OpenSSH สำหรับขั้นตอนเพิ่มเติม คุณยังสามารถทำตามขั้นตอนเดียวกันนี้เพื่อถอนการติดตั้ง OpenSSH หากจำเป็น
PowerShell
ถ้าคุณต้องการให้มีประสิทธิภาพมากขึ้น คุณสามารถทำตามขั้นตอนเดียวกับด้านบนในหน้าต่าง PowerShell ที่ยกระดับขึ้น
กด Win + R พิมพ์ powershell แล้วกด CTRL + เปลี่ยน + เข้าสู่ ขั้นแรก ตรวจสอบให้แน่ใจว่าส่วนประกอบ OpenSSH พร้อมใช้งาน:
Get-WindowsCapability-Online | Where-Object Name-like’OpenSSH*’
ถัดไป ติดตั้งไคลเอนต์ OpenSSH และคอมโพเนนต์เซิร์ฟเวอร์:
Add-WindowsCapability-Online-Name OpenSSH.Client~~~~0.0.1.0
Add-WindowsCapability-Online-Name OpenSSH.Server~~ ~~0.0.1.0
เริ่มบริการ sshd และ ssh-agent และเปลี่ยนประเภทการเริ่มต้นเป็น Automatic เช่น:
Set-Service-Name sshd-StartupType’Automatic’-Status Running
ตั้งค่าบริการ-ชื่อ ssh-agent-StartupType’อัตโนมัติ’-สถานะกำลังทำงาน
ถัดไป กำหนดค่ากฎไฟร์วอลล์ Windows ที่จำเป็นสำหรับการรับส่งข้อมูล SSH:
New-NetFirewallRule-Name’OpenSSH-Server-In-TCP’-DisplayName’OpenSSH Server (sshd)’-Enabled True-Direction Inbound-Protocol TCP-การดำเนินการอนุญาต-LocalPort 22
เมื่อการตั้งค่าเสร็จสมบูรณ์แล้ว คุณสามารถเริ่มใช้ SSH ได้ โปรดดูส่วนเริ่มต้นใช้งาน OpenSSH หากคุณต้องการความช่วยเหลือในเรื่องนี้ นอกจากนี้ หากคุณต้องการถอนการติดตั้งคอมโพเนนต์ OpenSSH นี่คือคำสั่งที่จำเป็น:
Remove-WindowsCapability-Online-Name OpenSSH.Client~~~~0.0.1.0
Remove-WindowsCapability-Online-Name OpenSSH.Server ~~~~0.0.1.0
GitHub (MSI)
หากคุณดาวน์โหลด OpenSSH แพ็กเกจจาก GitHub คุณสามารถติดตั้งคอมโพเนนต์โดยใช้โปรแกรมติดตั้ง MSI ที่มี msiexec/i <เส้นทางไปยัง opensh.msi>
ตัวอย่างเช่น หากไฟล์อยู่ในไดเร็กทอรีปัจจุบันของคุณ ให้ใช้
msiexec/i openssh.msi หากไฟล์อยู่ในโฟลเดอร์ดาวน์โหลด ให้ใช้
msiexec/i C:\users\anup\downloads\openssh.msi หากต้องการถอนการติดตั้ง OpenSSH ให้ใช้
msiexec/x
msiexec/i openssh.msi ADDLOCAL=Client
msiexec/i openssh.msi ADDLOCAL=Server
msiexec/i openssh.msi REMOVE=Client
msiexec/i opensh.msi REMOVE=เซิร์ฟเวอร์
หลังจากติดตั้งคอมโพเนนต์แล้ว ให้ทำตามขั้นตอนเหล่านี้เพื่ออัปเดตตัวแปร PATH ของระบบ:
กด Win + R พิมพ์ systempropertiesadvanced แล้วกด Enter คลิกที่ ตัวแปรสภาพแวดล้อม ในส่วนตัวแปรระบบ เลือกเส้นทาง แล้วคลิกแก้ไข
ตรวจสอบ %systemroot%\System32\openssh ที่นี่ หากไม่มี ให้คลิก ใหม่ และเพิ่มลงในรายการ โปรดทราบว่านี่คือเส้นทางการติดตั้งเริ่มต้น หากคุณติดตั้ง OpenSSH บนเส้นทางอื่น ให้เปลี่ยนค่าตามขั้นตอนนี้
กด ตกลง > ตกลง เพื่อบันทึกการเปลี่ยนแปลง
ตอนนี้ คุณสามารถเรียกใช้ Get-Service-Name ssh* ใน PowerShell เพื่อตรวจสอบว่าส่วนประกอบได้รับการติดตั้งอย่างถูกต้อง หากคุณจำเป็นต้องเริ่มบริการที่จำเป็นหรือเปิดพอร์ต โปรดดูขั้นตอนในส่วนใดส่วนหนึ่งก่อนหน้านี้
สุดท้าย หากคุณต้องการใช้วิธีอื่น เช่น Winget หรือ Chocolatey เราขอแนะนำให้ตรวจสอบ วิกิ OpenSSH บน GitHub นอกจากคำแนะนำในการติดตั้งแล้ว ยังมีตัวอย่างการใช้งานและคู่มือต่างๆ ที่คุณอาจพบว่ามีประโยชน์
การกำหนดค่าเซิร์ฟเวอร์ OpenSSH
ตามค่าเริ่มต้น เซิร์ฟเวอร์ OpenSSH (sshd) ใน Windows จะอ่าน ข้อมูลการกำหนดค่าจาก %programdata%\ssh\sshd_config ไฟล์นี้มีตัวเลือกการกำหนดค่ามากมาย แต่เนื่องจากการใช้งาน Windows ของ OpenSSH ยังค่อนข้างใหม่ ปัจจุบันจึงรองรับเฉพาะการกำหนดค่าบางอย่างเท่านั้น
เราได้แสดงรายการการเปลี่ยนแปลงการกำหนดค่าที่ทำโดยทั่วไปด้านล่างเพื่อเป็นข้อมูลอ้างอิง เราขอแนะนำให้ตรวจสอบ การกำหนดค่าเซิร์ฟเวอร์ OpenSSH คู่มือจาก Microsoft หรือ รายการบน GitHub สำหรับรายการทั้งหมด ตัวเลือก. นอกจากนี้ อย่าลืมรีสตาร์ทบริการ sshd เพื่อใช้การเปลี่ยนแปลงใดๆ ที่เกิดขึ้น
ยกเลิกการแสดงความคิดเห็นในบรรทัด พอร์ต และเปลี่ยนค่าหากคุณต้องการเปลี่ยนพอร์ต SSH คุณจะต้องเพิ่มกฎไฟร์วอลล์เพื่ออนุญาตการรับส่งข้อมูลขาเข้าบนพอร์ตดังกล่าว
เปลี่ยน ListenAddress จาก 0.0.0.0 เป็นอย่างอื่น หากคุณต้องการฟังเฉพาะที่อยู่ IP ที่ระบุ เพิ่ม ListenAddress หลายบรรทัดในลักษณะเดียวกัน หากคุณต้องการฟังที่อยู่ IP หลายรายการ เปลี่ยน GSSAPIAuthentication เป็นใช่ หากคุณต้องการใช้การตรวจสอบสิทธิ์ Kerberos เพิ่มคำสั่ง AllowGroups, AllowUsers, DenyGroups และ DenyUsers เพื่อควบคุมกลุ่มและผู้ใช้ที่สามารถเข้าถึงเซิร์ฟเวอร์ SSH. หากทำงานกับผู้ใช้โดเมนและกลุ่ม ให้ตรวจสอบตัวอย่างต่อไปนี้สำหรับการอ้างอิงรูปแบบ:
DenyUsers tnt\[email protected]
DenyUsers tnt\*
AllowGroups tnt\sshclients tnt\serveradmins หากต้องจัดการกับผู้ใช้เวิร์กกรุ๊ปและ ให้ตรวจสอบตัวอย่างเหล่านี้แทน:
AllowUsers [email protected]
AllowGroups sshclients สุดท้าย คุณสามารถใช้คำสั่งต่อไปนี้ใน PowerShell เพื่อตั้งค่าเชลล์ OpenSSH เริ่มต้นเป็น PowerShell แทนพรอมต์คำสั่ง:
New-ItemProperty-Path”HKLM:\SOFTWARE\OpenSSH”-ชื่อ DefaultShell-ค่า”C:\Windows\System32\WindowsPowerShell\v1.0\powershell.exe”-PropertyType String-Force
เริ่มต้นใช้งาน OpenSSH
คุณสามารถใช้วิธีใดๆ ที่ระบุไว้ด้านบนเพื่อตั้งค่า ระบบ Windows อื่นเป็นไคลเอนต์ OpenSSH เซิร์ฟเวอร์ หรือทั้งสองอย่าง และหากคุณเพิ่งเริ่มใช้ SSH ต่อไปนี้เป็นขั้นตอนพื้นฐานในการเริ่มต้น:
ขั้นแรก กด Win + R พิมพ์ sysdm.cpl แล้วกด Enter ตรวจสอบว่าคุณเป็นผู้ใช้ Workgroup หรือ Domain ที่นี่
กด Win + R พิมพ์ powershell แล้วกด Enter หากคุณเป็นผู้ใช้เวิร์กกรุ๊ป ให้ป้อนคำสั่งต่อไปนี้และข้ามไปที่ขั้นตอนที่ 6:
ssh user@host
หากคุณเป็นผู้ใช้โดเมน ให้ป้อนคำสั่งใดๆ ต่อไปนี้:
ssh-l user@domain host
โดเมน ssh\user@host
ssh user@domain@host
ssh user@host
ในการเข้าสู่ระบบครั้งแรก คุณจะต้องยืนยันว่าโฮสต์นั้นเชื่อถือได้ หากคุณป้อน ใช่ โฮสต์จะถูกเพิ่มในรายการโฮสต์ที่รู้จัก
ตอนนี้ ให้ป้อนรหัสผ่านของบัญชีโฮสต์แล้วกด Enter
โดยทั่วไปการตรวจสอบสิทธิ์โดยใช้รหัสผ่านนั้นใช้ได้ แต่ในทางที่ดี คุณควรใช้วิธีการตรวจสอบสิทธิ์ที่ปลอดภัยยิ่งขึ้น เช่น คีย์ Kerberos และ SSH สำหรับ Kerberos ให้ทำตามขั้นตอนด้านล่าง:
บนเซิร์ฟเวอร์ที่เข้าร่วมโดเมน ให้ไปที่ %programdata%\ssh\ เปิดไฟล์ sshd_config ด้วยโปรแกรมแก้ไขข้อความ ยกเลิกการแสดงความคิดเห็นบรรทัด GSSAPIAuthentication ตั้งค่าเป็น ใช่ และบันทึกการเปลี่ยนแปลง
ใน Powershell ให้ใช้คำสั่งต่อไปนี้เพื่อเริ่มบริการ sshd ใหม่และใช้การเปลี่ยนแปลงจากด้านบน:
net stop sshd
net เริ่ม sshd
ตอนนี้ บนไคลเอนต์ Windows ที่เข้าสู่ระบบในฐานะผู้ใช้โดเมน ให้ป้อนชื่อโฮสต์ ssh-K
ตรวจสอบสิทธิ์ด้วยคีย์ SSH
เมื่อเชื่อมต่อข้ามโดเมน ไม่แนะนำให้ใช้การตรวจสอบสิทธิ์ด้วยรหัสผ่านเนื่องจากมีความเสี่ยงที่จะถูกบังคับโดยดุร้าย คุณควรใช้การรับรองความถูกต้องด้วยคีย์สาธารณะแทน ซึ่งใช้อัลกอริทึมการเข้ารหัสเพื่อสร้างไฟล์คีย์สาธารณะหนึ่งไฟล์และไฟล์คีย์ส่วนตัวหนึ่งไฟล์
คีย์สาธารณะของผู้ใช้จะถูกจัดเก็บไว้ในเซิร์ฟเวอร์ SSH และจะถูกเปรียบเทียบกับคีย์ส่วนตัวฝั่งไคลเอ็นต์สำหรับการตรวจสอบสิทธิ์ ตราบใดที่ไพรเวตคีย์ได้รับการปกป้องอย่างเหมาะสม วิธีการตรวจสอบสิทธิ์นี้จะปลอดภัยกว่ามาก
คุณจะต้องสร้างคู่คีย์บนระบบไคลเอ็นต์ สร้างไฟล์คีย์ที่ได้รับอนุญาตบนเซิร์ฟเวอร์ และจัดเก็บ รหัสสาธารณะของลูกค้าในไฟล์นี้ ในการดำเนินการนี้ ให้เริ่มด้วยขั้นตอนต่อไปนี้บนระบบเซิร์ฟเวอร์:
กด Win + R พิมพ์ powershell แล้วกด CTRL + Shift + Enter สร้างไฟล์ administrators_authorized_keys สำหรับผู้ใช้ในกลุ่มผู้ดูแลระบบ:
New-Item-Type File-Path C:\ProgramData\ssh\administrators_authorized_keys สำหรับผู้ใช้มาตรฐาน:
New-Item-Type File-Path C:\Users\username\.ssh \administrators_authorized_keys ในกรณีของเรา เราสร้างไฟล์โดยใช้บัญชีผู้ดูแลระบบ หากคุณใช้บัญชีมาตรฐาน ให้เปลี่ยนเส้นทางไฟล์ตามคำสั่งที่เหลือ ตั้งค่าสิทธิ์การเข้าถึงสำหรับไฟล์คีย์ด้วย:
get-acl C:\ProgramData\ssh\ssh_host_dsa_key | set-acl C:\ProgramData\ssh\administrators_authorized_keys
ตอนนี้ เปิดใช้หน้าต่าง Elevated PowerShell บนระบบไคลเอ็นต์และทำตามขั้นตอนเหล่านี้:
ใช้ cd ~/.ssh เพื่อไปที่ไดเร็กทอรี.ssh และสร้าง คู่คีย์กับ ssh-keygen
เมื่อได้รับแจ้งให้ระบุตำแหน่งไฟล์ ให้กด Enter เพื่อใช้ค่าเริ่มต้น:
C:\Users\username\.ssh\ Add วลีรหัสผ่านสำหรับคีย์ส่วนตัวของคุณ หากคุณต้องการปรับปรุงความปลอดภัยเพิ่มเติม
ตอนนี้ จัง กำหนดค่า ผู้ใช้ และ โฮสต์ และเรียกใช้คำสั่งที่แสดงด้านล่าง จะเพิ่มรหัสสาธารณะของลูกค้าไปยังไฟล์รหัสที่ได้รับอนุญาตบนเซิร์ฟเวอร์ $public_key=รับเนื้อหา ~/.ssh/id_rsa.pub ssh user@host”‘$($public_key)’| Out-File C:\ProgramData\ssh\administrators_authorized_keys-Encoding UTF8-Append”
ป้อนรหัสผ่านของคุณเพื่ออนุมัติการดำเนินการ ตอนนี้ คุณจะสามารถเชื่อมต่อโดยใช้การตรวจสอบสิทธิ์คีย์สาธารณะ
การแก้ไขปัญหาข้อผิดพลาดทั่วไป
ข้อผิดพลาด SSH เช่น การเชื่อมต่อพอร์ต 22 ถูกปฏิเสธ หรือการเชื่อมต่อหมดเวลาเป็นเรื่องปกติ หากคุณทำตามขั้นตอนจากบทความนี้ ขั้นตอนพื้นฐาน เช่น การตรวจสอบว่าบริการ SSH กำลังทำงาน การเริ่มระบบใหม่ การอนุญาตทราฟฟิก SSH ผ่านไฟร์วอลล์ การเพิ่ม SSH ใน PATH ของระบบ ฯลฯ จะครอบคลุมอยู่แล้ว
นอกจากนี้ ต่อไปนี้คือขั้นตอนการแก้ปัญหาเพิ่มเติมที่ควรลอง:
ขั้นแรก ตรวจสอบให้แน่ใจว่าได้ทำตามขั้นตอนที่กล่าวถึงข้างต้นบนระบบระยะไกลด้วย ลองอีกครั้งและตรวจสอบให้แน่ใจว่าคุณป้อนข้อมูลประจำตัวที่ถูกต้อง ใช้ที่อยู่ IP ของโฮสต์แทนชื่อโฮสต์ หากวิธีนี้ได้ผล ให้แก้ไขปัญหา DNS โดยการล้างแคชหรือใช้เซิร์ฟเวอร์อื่น Ping โฮสต์เพื่อให้แน่ใจว่าไม่มีการสูญเสียแพ็กเก็ต ตรวจสอบ พอร์ต SSH และ ListenAddress ในไฟล์ sshd_config ของเซิร์ฟเวอร์ ใช้แฟล็กแบบละเอียด (ssh-v หรือ ssh-vvv) เพื่อดูรายละเอียดเพิ่มเติมเกี่ยวกับสิ่งที่ผิดพลาด