ในบทความนี้ เราจะกำหนดค่าการตรวจสอบสิทธิ์ SSH ด้วยคีย์ RSA บน Windows เพื่อเข้าถึงเซิร์ฟเวอร์/คอมพิวเตอร์ระยะไกลได้อย่างปลอดภัย เราจะแสดงวิธีสร้างคีย์ RSA (ใบรับรอง) บน Windows และกำหนดค่าเซิร์ฟเวอร์ OpenSSH ในตัวบน Windows 10/Windows Server 2019 สำหรับการตรวจสอบสิทธิ์ด้วยคีย์ (อนุญาตให้ตรวจสอบสิทธิ์บนโฮสต์ระยะไกลโดยไม่ต้องใช้รหัสผ่าน)
การรับรองความถูกต้องด้วยคีย์ SSH นั้นใช้กันอย่างแพร่หลายในโลกของลินุกซ์ แต่ในวินโดวส์นั้นได้ปรากฏขึ้นมาเมื่อไม่นานนี้เอง แนวคิดคือเพิ่มพับลิกคีย์ของไคลเอ็นต์บนเซิร์ฟเวอร์ SSH และเมื่อไคลเอ็นต์พยายามเชื่อมต่อ เซิร์ฟเวอร์จะตรวจสอบว่าไคลเอ็นต์มีคีย์ส่วนตัวที่เกี่ยวข้องหรือไม่
สารบัญ:
- กำลังสร้าง SSH (RSA) บน Windows
- การกำหนดค่าเซิร์ฟเวอร์ OpenSSH บน Windows เพื่อตรวจสอบสิทธิ์โดยใช้คีย์ SSH
- วิธีการเข้าสู่ระบบ Windows โดยใช้คีย์ SSH ภายใต้ Local Admin?
กำลังสร้าง SSH (RSA) บน Windows
คุณต้องสร้างคีย์ RSA สองคีย์ (คีย์สาธารณะและคีย์ส่วนตัว) บนคอมพิวเตอร์ไคลเอนต์ที่คุณจะใช้เพื่อเชื่อมต่อกับเซิร์ฟเวอร์ Windows ระยะไกลที่กำลังเรียกใช้ OpenSSH คีย์ส่วนตัวถูกเก็บไว้ในฝั่งไคลเอ็นต์ (อย่าส่งต่อให้ใครเลย!) และคีย์สาธารณะจะถูกเพิ่มใน authorized_keys ไฟล์บนเซิร์ฟเวอร์ SSH ในการสร้างคีย์ RSA บนไคลเอนต์ Windows คุณต้องติดตั้งไคลเอนต์ OpenSSH
ใน Windows 10 1809 (และใหม่กว่า) และ Windows Server 2019 ไคลเอ็นต์ OpenSSH ได้รับการติดตั้งเป็นคุณลักษณะแยกต่างหาก:
Add-WindowsCapability -Online -Name OpenSSH.Client~~~~0.0.1.0
เรียกใช้เซสชัน PowerShell มาตรฐาน (ไม่มีสิทธิ์พิเศษ) และสร้างคู่ของคีย์ RSA 2048 โดยใช้คำสั่ง:
ssh-keygen
คุณจะได้รับแจ้งให้ป้อนรหัสผ่านเพื่อป้องกันคีย์ส่วนตัว หากคุณระบุรหัสผ่าน คุณจะต้องป้อนรหัสผ่านทุกครั้งที่ใช้คีย์นี้สำหรับการตรวจสอบสิทธิ์ SSH ฉันยังไม่ได้ป้อนข้อความรหัสผ่าน (ไม่แนะนำ)
Ssh-keygen จะสร้าง .ssh ในโปรไฟล์ของผู้ใช้ Windows ปัจจุบัน (C:\Users\your_username) และวาง 2 ไฟล์ในนั้น:
- id_rsa – คีย์ส่วนตัว
- id_rsa.pub – กุญแจสาธารณะ
หลังจากที่คุณสร้างคีย์ RSA แล้ว คุณสามารถเพิ่มคีย์ส่วนตัวไปยัง ตัวแทน SSH บริการที่ช่วยให้จัดการคีย์ส่วนตัวได้อย่างสะดวกและใช้สำหรับการตรวจสอบสิทธิ์ SSH Agent จัดเก็บคีย์ส่วนตัวและจัดเตรียมไว้ในบริบทความปลอดภัยของผู้ใช้ปัจจุบัน เรียกใช้บริการ ssh-agent และกำหนดค่าให้เริ่มต้นอัตโนมัติโดยใช้คำสั่งการจัดการบริการ PowerShell:
set-service ssh-agent StartupType ‘Automatic’
Start-Service ssh-agent
เพิ่มคีย์ส่วนตัวของคุณลงในฐานข้อมูล ssh-agent:
ssh-add "C:\Users\youruser\.ssh\id_rsa"
หรือดังนี้:
ssh-add.exe $ENV:UserProfile\.ssh\id_rsa
การกำหนดค่าเซิร์ฟเวอร์ OpenSSH บน Windows เพื่อตรวจสอบสิทธิ์โดยใช้คีย์ SSH
จากนั้นคัดลอกคีย์สาธารณะที่คุณสร้างขึ้นบนไคลเอ็นต์ไปยังเซิร์ฟเวอร์ SSH ของคุณ (ในตัวอย่างนี้ เป็นคอมพิวเตอร์ระยะไกลที่ใช้ Windows 10 1903 และกำหนดค่า OpenSSH)
เราได้พูดถึงวิธีกำหนดค่าเซิร์ฟเวอร์ OpenSSH ใน Windows โดยละเอียดแล้วคัดลอก id_rsa.pub ไฟล์ไปที่ .ssh ไดเร็กทอรีในโปรไฟล์ของผู้ใช้ที่คุณจะใช้เพื่อเชื่อมต่อกับเซิร์ฟเวอร์ SSH ตัวอย่างเช่น ฉันมี ผู้ดูแลระบบ ผู้ใช้ใน Windows 10 ของฉัน ดังนั้นฉันต้องคัดลอกคีย์ไปที่ C:\Users\admin \.ssh\authorized_keys.
คุณสามารถคัดลอกกุญแจสาธารณะไปยังเซิร์ฟเวอร์ SSH โดยใช้ SCP:
scp C:\Users\youruser\.ssh\id_rsa.pub [email protected]:c:\users\admin\.ssh\authorized_keys
ตอนนี้คุณสามารถเชื่อมต่อกับเซิร์ฟเวอร์ Windows SSH โดยไม่ต้องใช้รหัสผ่าน หากคุณไม่ได้ตั้งรหัสผ่าน (ข้อความรหัสผ่าน) สำหรับคีย์ส่วนตัว คุณจะเชื่อมต่อกับโฮสต์ Windows ระยะไกลของคุณโดยอัตโนมัติ
หากต้องการเชื่อมต่อกับรีโมตโฮสต์โดยใช้ไคลเอ็นต์ SSH ดั้งเดิม คุณจะต้องใช้คำสั่งต่อไปนี้:
ssh (username)@(SSH server name or IP address)
ตัวอย่างเช่น:
หมายความว่าคุณต้องการเชื่อมต่อกับเซิร์ฟเวอร์ SSH ระยะไกลด้วยที่อยู่ IP 192.168.1.15 ภายใต้ ผู้ดูแลระบบ บัญชีผู้ใช้. SSH Agent จะพยายามใช้คีย์ส่วนตัวที่บันทึกไว้ก่อนตรวจสอบสิทธิ์โดยอัตโนมัติ
หากคุณไม่ต้องการใช้บริการ ssh-agent เพื่อจัดการคีย์ SSH คุณสามารถระบุพาธไปยังไฟล์ไพรเวตคีย์เพื่อใช้สำหรับการตรวจสอบสิทธิ์ SSH:
ssh [email protected] -i "C:\Users\youruser\.ssh\id_rsa"
หากคุณไม่สามารถเชื่อมต่อกับเซิร์ฟเวอร์ SSH ของคุณโดยใช้คีย์ RSA และคุณยังคงได้รับแจ้งให้ป้อนรหัสผ่าน อาจเป็นไปได้ว่าบัญชีผู้ใช้ที่คุณพยายามเชื่อมต่อเป็นสมาชิกของกลุ่มผู้ดูแลระบบเซิร์ฟเวอร์ภายใน (กลุ่ม SID คือ S-1-5-32-544) เราจะหารือกันในภายหลัง
วิธีการเข้าสู่ระบบ Windows โดยใช้คีย์ SSH ภายใต้ Local Admin
OpenSSH ใช้การตั้งค่าการเข้าถึงแบบใช้คีย์พิเศษสำหรับผู้ใช้ที่มีสิทธิ์ของผู้ดูแลระบบภายในของ Windows
ก่อนอื่น ใช้ไฟล์คีย์ C:\ProgramData\ssh\administrators_authorized_key s แทน authorized_keys ไฟล์ในโปรไฟล์ผู้ใช้ คุณต้องเพิ่มคีย์ SSH ของคุณลงในไฟล์ข้อความนี้ (เพื่อความปลอดภัย เฉพาะกลุ่มผู้ดูแลระบบและ SYSTEM ควรมีสิทธิ์ในการอ่านไฟล์นี้)
เพื่อใช้ไฟล์ Author_keys จากโปรไฟล์ผู้ใช้และไม่ย้ายข้อมูลคีย์สาธารณะไปยังไฟล์ administrators_authorized_keys คุณสามารถแสดงความคิดเห็นบรรทัดที่เกี่ยวข้องในไฟล์การกำหนดค่า OpenSSH (C:\ProgramData\ssh\sshd_config )
แสดงความคิดเห็นบรรทัดเหล่านี้:#Match Group administrators
# AuthorizedKeysFile __PROGRAMDATA__/ssh/administrators_authorized_keys
อนุญาตให้เข้าถึง Windows โดยใช้คีย์ RSA ในไฟล์ sshd_config:
PubkeyAuthentication yes
และปิดการใช้งานการเข้าสู่ระบบรหัสผ่าน ssh:
PasswordAuthentication no
อย่าลืมเริ่มบริการ sshd ใหม่หลังจากบันทึกการเปลี่ยนแปลงใน sshd_config
restart-service sshd
นี่เป็นอีกสิ่งที่สำคัญ ใน OpenSSH เวอร์ชันก่อนหน้า คุณต้องให้ NT Service\sshd สิทธิ์ในการอ่านในไฟล์ Author_keys
หากต้องการทำสิ่งนี้ คุณต้องทำอย่างใดอย่างหนึ่งต่อไปนี้:
- ติดตั้ง โมดูล OpenSSHUtils :
Install-Module -Force OpenSSHUtils -Scope AllUsers
. หากต้องการเปลี่ยนสิทธิ์ของไฟล์ ให้รันคำสั่งนี้:Repair-AuthorizedKeyPermission -FilePath C:\Users\admin\.ssh\authorized_keys
- เปลี่ยนการอนุญาต NTFS สำหรับไฟล์โดยใช้โมดูล NTFSSecurity หรือ icacls
- หรือปิดใช้งาน StrictModes ในไฟล์ sshd_config โดยค่าเริ่มต้น โหมดนี้จะเปิดใช้งานและป้องกันการพิสูจน์ตัวตนด้วยคีย์ หากคีย์สาธารณะและคีย์ส่วนตัวไม่ได้รับการปกป้องอย่างดี ยกเลิกการใส่เครื่องหมายบรรทัด
#StrictModes yes
และเปลี่ยนเป็นStrictModes no
.
ดังนั้นคุณได้กำหนดค่าการรับรองความถูกต้อง SSH บน Windows โดยใช้คีย์ RSA สาธารณะ (ใบรับรอง) ตอนนี้ คุณสามารถใช้วิธีการตรวจสอบสิทธิ์นี้เพื่อเข้าถึงเซิร์ฟเวอร์ระยะไกลได้อย่างปลอดภัย ส่งต่อพอร์ตในอุโมงค์ข้อมูล SSH โดยอัตโนมัติ เรียกใช้สคริปต์ และทำงานอื่นๆ ที่เกี่ยวข้องกับระบบอัตโนมัติ