หัวเรื่องสำคัญของบทความนี้คือ จะใช้ Windows Terminal เชื่อมต่อผ่าน SSH ไปยังเครื่อง Linux Server โดยใช้ Private Keys ซึ่งโดยมากคนที่ใช้ Windows จะคุ้นเคยกับ Putty และหลายคนก็ใช้ SSH Key ในการเข้าใช้งาน แทนการพิมพ์ User Password แบบโต้งๆ ที่มันเป็นสิ่งล่อตาล่อใจเหล่า Hack Tools ทั้งหลาย ซึ่งบทความนี้จะข้ามการอธิบายว่า SSH คืออะไร ? ทำไมต้องใช้ SSH Key ? ซึ่งเราจะมาสร้างเจ้า SSH Key ด้วย Windows Terminal
เกี่ยวกับ Windows Terminal พระเอกของงานนี้ เป็นการยกระดับอีกขั้นของ OS สำหรับ Developer และผู้ใช้งาน Linux ซึ่งต้องไป download ใน Microsoft Store ตามลิ้งค์นี้ https://www.microsoft.com/store/productId/9N0DX20HK701
Jump to Contents
วิธีสร้าง SSH key-pair ด้วยการเข้ารหัสแบบ Ed25519
เนื่องจากแรกใช้การเข้ารหัสแบบ RSA ทาง OpenSSH ประกาศจะเลิกรองรับ หลังประกาศเวอร์ชั่น 8.3 (https://www.blognone.com/node/116608) ทำให้ต้องเปลี่ยนมาใช้ key ที่เข้ารหัสแบบอื่นแทน
อ้างอิงจาก : https://medium.com/p/c6e8d60d3c54
- 🚨 DSA: It’s unsafe and even no longer supported since OpenSSH version 7, you need to upgrade it!
- ⚠️ RSA: It depends on key size. If it has 3072 or 4096-bit length, then you’re good. Less than that, you probably want to upgrade it. The 1024-bit length is even considered unsafe.
- 👀 ECDSA: It depends on how well your machine can generate a random number that will be used to create a signature. There’s also a trustworthiness concern on the NIST curves that being used by ECDSA.
- ✅ Ed25519: It’s the most recommended public-key algorithm available today!
จากอ้างอิงด้านบนก็ทำให้เราเหลือตัวเลือกที่จะทำต่อแค่ 2 แบบ คือ ECDSA และ Ed25519 ซึ่งก็ต้องเป็นอันหลังสุดอยู่แล้ว ที่เป็น most recommended!
เปิด Windows Terminal ขึ้นมา พิมพ์ cd ~
เพื่อไปยัง home directory ของเรา
cd ~
จากนั้นพิมพ์ mkdir เพื่อสร้าง folder ขึ้นมาชื่อ .ssh ที่เราจะใช้เก็บ SSH Key ไว้บนเครื่องเรานั่นเอง
mkdir .ssh
จากนั้นพิมพ์ ssh-keygen -t ed25519
เพื่อสร้าง key pair
ssh-keygen -t ed25519
บรรทัดแรกจะมีข้อความขึ้นว่า Enter file in which to save the key (C:\Users\MoreMeng/.ssh/id_ed25519):
โดยชื่อไฟล์อัตโนมัติ คือ id_en25519 ถ้าต้องการชื่ออื่นก็ พิมพ์ชื่อใหม่เข้าไป
ต่อมา Enter passphrase (empty for no passphrase):
เป็นการกำหนดรหัสเข้าไปอีก เพื่อให้ key ของเรามีเงื่อนงำ หรือปล่อยเป็นค่าวางก็ได้ กด enter ไปเลย
Enter same passphrase again:
กรอกเหมือนเดิม และกด enter
เสร็จแล้ว ใน .ssh เราจะมีไฟล์เพิ่มเข้ามา 2 ไฟล์ id_ed25519
เป็น private key ที่ต้องเก็บไว้ในเครื่องเรา และ id_ed25519.pub
เป็น public key ที่เอาไปวางไว้บน server เครื่องที่เราจะเข้าใช้งาน
วิธีนำ public key ไปวางไว้บน server
เนื่องจากเราไม่มี ssh-copy-id
แบบชาวบ้านเขา เราก็ต้องใช้ทางอ้อม ตาม code นี้ จะส่ง public key ไปยัง Raspberry Pi ที่ติดตั้ง Raspbian ไว้เรียบร้อยแล้ว
Full command
cat ~/.ssh/id_ed25519.pub | ssh -i ~/.ssh/id_ed25519 [email protected] "mkdir -p ~/.ssh && touch ~/.ssh/authorized_keys && chmod -R go= ~/.ssh && cat >> ~/.ssh/authorized_keys"
เคยสร้าง RSA ไว้แล้ว ก็แค่เพิ่ม Ed25519 เข้าไป
cat ~/.ssh/id_ed25519.pub | ssh -i ~/.ssh/id_ed25519 [email protected] "cat >> ~/.ssh/authorized_keys"
จากนั้นบรรทัดต่อมาจะขึ้น [email protected]'s password:
ให้กรอกรหัสผ่านเข้าไป
เสร็จแล้วทดสอบ login ด้วย ssh [email protected]
ตรวจสอบไฟล์ authorized_key โดยพิมพ์
nano ~/.ssh/authorized_keys
ปิด การ Login ด้วย password หรือ ไม่ก็ได้ ข้อดีคือ ช่วยเพิ่มระดับความปลอดภัย
nano /etc/ssh/sshd_config
แล้วแก้ PasswordAuthentication
ให้เป็น no
PasswordAuthentication no
จากนั้น restart ssh service ด้วยคำสั่ง
sudo service ssh restart
สรุป
ข้อดีของ Windows Terminal คือมัน ctrl + c , ctrl + v ได้ ไม่ต้อง คลิกขวา เหมือน cmd หรือ powershell และมันยังจดจำ command line ที่เราพิมพ์เอาไว้ด้วย !! ซึ่งหลังจากได้ลองใช้ Windows Terminal แล้วรู้สึกติดใจ ตอนนี้ไม่ได้เปิด Putty เพื่อใช้ SSH อีกเลย
ข้อมูลอ้างอิง
- How To Set Up SSH Keys on CentOS 7
https://www.digitalocean.com/community/tutorials/how-to-set-up-ssh-keys-on-centos7 - Upgrade Your SSH Key to Ed25519
https://medium.com/p/c6e8d60d3c54 - SSH Keys
https://www.ssh.com/ssh/key/ - How to Setup Raspberry Pi SSH Keys for Authentication
https://pimylifeup.com/raspberry-pi-ssh-keys/ - มาสร้าง SSH Key กัน
https://medium.com/p/2d4ce239d403