ภาพรวมการทำงานที่ Client ใช้ ssh-keygen สร้าง Private + Public Key ขึ้นมา จากนั้นนำ Public Key ที่วางที่เครื่อง Server ในไฟล์ authorized_keys
จากนั้นจะเป็นการทดสอบ Connect โดยมีขั้นตอน ดังนี้
How do you generate the SSH key pair
ใช้คำสั่ง ssh-keygen เพื่อสร้าง SSH key pair ตอน Run คำสั่ง ssh-keygen จะใช้ Algorithm RSA ซึ่งอาจจะไม่ปลอดภัยในปัจจุบันแล้ว ถ้าต้องการใช้ Algorithm อย่าง ED25519 ตอนสร้าง SSH key pair แก้ไขคำสั่ง ดังนี้
#Pattern ssh-keygen -t <<Algorithm>> #Example ssh-keygen -t ed25519
โดยมันจะถาม Path ด้านล่าง ว่าให้เก็บที่ Path /home/<<YOUR_USERNAME>>/.ssh (C:\Users\<>/.ssh/) และชื่อไฟล์ id_rsa หรือ ถ้าใช้ ed25519 ก็จะเป็นชื่อไฟล์ id_ed25519
Generating public/private ed25519 key pair. Enter file in which to save the key (C:\Users\<<YOUR_USERNAME>>/.ssh/id_ed25519): Enter passphrase (empty for no passphrase): Enter same passphrase again:
จากนั้นจะเป็นการกำหนด passphrase จะเป็นส่วนของ Password ที่ต้องใช้คู่กับ Key ถ้าไม่ต้องการกำหนดก็สามารถกด Enter ข้ามได้เลยครับ และรอระบบสร้าง public (.pub) และ private key ครับ โดยที่ทั้ง 2 ไฟล์นี้ ปกติแล้วจะถูกสร้างที่ Path C:\Users\<YOURUSERNAME>/.ssh
Algorithm | Default Private Key Name | Default Public Key Name |
---|---|---|
RSA | id_rsa | id_rsa.pub |
ed25519 | id_ed25519 | id_ed25519.pub |
NOTE: จาก Step ตรงนี้ ถ้าใครอยากได้ไฟล์ .ppk (PuTTY Private Key) สามารถใช้ตัว Putty มาช่วย Generate ได้ครับ โดยเอา Public Key (id_rsa.pub) มาสร้างครับ
ต่อไปวาง public key ที่เครื่องเป้าหมาย เพื่อต้องการเขื่อมต่อครับ โดยไฟล์สำหรับ Windows ที่ Path C:\programdata\ssh โดยมีที่วาง Public Key อยู่ 2 ไฟล์ ได้แก่
- administrators_authorized_keys - สำหรับ user ในกลุ่ม administrator ครับ อ๋อ อย่างลืมกำหนดสิทธิให้ admin read/write เท่านั้นด้วยนะครับ
- authorized_keys - สำหรับ user ทั่วไป
โดยในเคสนี้ ผมต้องการใช้ user ในกลุ่ม administrator เลยต้องสร้างไฟล์ administrators_authorized_keys ขึ้นมาครับ โดยอาจจะตัดแปะ public key (id_rsa.pub / id_ed25519.pub แล้วแต่ Algorithm ที่ใช้งานครับ) หรือจะใช้ scp โยนไฟล์ก็ได้ครับ
scp C:\Users\<<YOUR_USERNAME>>\.ssh\id_rsa.pub username@servername:C:\ProgramData\ssh\administrators_authorized_keys
หรือ ถ้าเครื่อง Client เป็น Linux จะใช้ ssh-copy-id ก็ได้ครับ
ssh-copy-id <user>@<<REMOTE-IP-OR-DOMAIN-NAME(FQDN)>>
NOTE:
- administrators_authorized_keys ต้องกำหนดสิทธิให้ถูกต้องนะครับ ถ้าขี้เกียจ cd เข้าไป path C:\programdata\ssh แล้ว Run คำสั่ง ดังนี้
icacls administrators_authorized_keys /inheritance:r icacls administrators_authorized_keys /grant SYSTEM:`(F`) icacls administrators_authorized_keys /grant BUILTIN\Administrators:`(F`)
- ส่วน authorized_keys ต้องกำหนดด้วย
icacls .\users\thisuser\.ssh\authorized_keys /inheritance:r icacls .\users\thisuser\.ssh\authorized_keys /remove otheruser2 #otheruser2 คือ user ที่เข้าไม่ได้
Setup SSH Public Key authentication
ก่อนอื่นต้อง Setup OpenSSH Server ก่อนครับ ถ้ายังไม่ได้ Setup ดูที่ blog นี้เลย Install OpenSSH Server on Windows 11/10 ถ้าพร้อมแล้วลุยกันเลยครับ
- เข้าไปที่ Path C:\programdata\ssh\ หาไฟล์ sshd_config
- จากนั้น Edit sshd_config ขึ้นมา จากนั้นหา Config
- PubkeyAuthentication กำหนดเป็น yes เพื่อบอกว่าใช้ key แล้วนะ
- และ PasswordAuthentication กำหนดเป็น no เพื่อปิดการใช้ Password ครับ
PubkeyAuthentication yes PasswordAuthentication no
และ Restart Service SSHD
Restart-Service sshd
Test SSH Public Key authentication
- หลังจากเราปิด PasswordAuthentication ลอง ssh ดูแล้ว พบ Error Message ดังรูป
- สาย PuTTY
- สำหรับใครที่เป็นสาย Putty แล้วใช้ PuTTY ประจำ ต้องแปลง Private Key ของเรา ให้อยู่ในรูปแบบ ppk (Putty Private Key) โดยใช้เครื่องมือ PuTTYGen
- 1 กดปุ่ม Load เพื่อเลือกไฟล์ Private Key ที่เคยสร้างไว้ตอนต้นด้วย ssh-keygen
- 2 จากนนั้นกด Save เพื่อให้มันสร้างตัวไฟล์ .ppk ขึ้นมาครับ
- หลังจากได้ตัว PPK แล้ว นำไฟล์ PPK มาใส่ไว้ Program PuTTY ดังรูป
- จากนั้นกด Open ใส่ชื่อ user จากได้ Session มาครับ โดย Default Shell เป็นตัว CMD
- สาย Windows Terminal
- ตอนเรียกใช้ ssh เพิ่ม Path Private Key ใส่เข้าไปจาก Parameter -i
ssh -i <<PATH-TO-PRIVATEKEY>> <<USER>>@<<SERVER-IP>> ssh -i C:\Users\Chatr\Work\key\id_dotnet56 invest@128.1.0.56
Reference
- Key-based authentication in OpenSSH for Windows | Microsoft Learn
- Security protection of various files in Win32 OpenSSH · PowerShell/Win32-OpenSSH Wiki (github.com)
Discover more from naiwaen@DebuggingSoft
Subscribe to get the latest posts sent to your email.