Windows Terminal SSH access with Ed25519 Private key

หัวเรื่องสำคัญของบทความนี้คือ จะใช้ 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

วิธีสร้าง 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!
  • ⚠️ RSAIt 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.
  • 👀 ECDSAIt 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.
  • ✅ Ed25519It’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 pi@129.0.14.2 "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 pi@129.0.14.2 "cat >> ~/.ssh/authorized_keys"

จากนั้นบรรทัดต่อมาจะขึ้น pi@129.0.14.2's password: ให้กรอกรหัสผ่านเข้าไป

เสร็จแล้วทดสอบ login ด้วย ssh pi@129.0.14.2

ตรวจสอบไฟล์ 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 อีกเลย

ข้อมูลอ้างอิง