[RPi] มาเพิ่มความปลอดภัยการใช้ SSH เข้า Raspberry Pi ด้วย SSH Key กัน

Sathittham (Phoo) Sangthong
SS Blog
Published in
4 min readJun 11, 2016
SS-SSH-Key-fb-share

ปกติเรา SSH (Secure Shell) เข้าใช้งาน Raspberry Pi ผ่านเครือข่าย ก็ถือว่าปลอภัยระดับหนึ่งครับ เนื่องจาก protocols ที่มีการเข้ารหัส (encrypts) ข้อมูลก่อนส่งไปยังเครือข่ายทุกครั้ง แต่ก็ยังมีช่องโหว่คือ เราต้องใส่ Username และ Password ครับ…วันนี้เรามาเพิ่มความปลอดภัยของการใช้ SSH ด้วย SSH Key กันครับ

SSH Key คืออะไร ?

SSH Key จะใช้การสร้าง คู่กุญแจ (key pair) ที่เป็นอักษรยาว ๆ ขนาด 2048 หรือ 4096 บิต เป็น Public key และ Private key โดย Public Key เราจะเก็บไว้ที่ Server ส่วน Private Key เราจะเก็บไว้ที่เครื่องเรา (Client) ระหว่างที่เราทำการ Login ก็จะทำการเช็คคู่กุญแจ ถ้าถูกต้อง ก็จะ Login เข้าไปได้เลย โดยไม่ต้องใส่ Password

ภาพจาก DigitalOcean

มาลองทำ SSH Key กันเลย

Step 1 : สร้างรหัส Public/Private Key

  • ดาวโหลดโปรแกรม PuTTYgen จาก http://www.chiark.greenend.org.uk/~sgtatham/putty/download.html
  • เปิดโปรแกรม PuTTYgen จะได้หน้าตาแบบนี้ครับ
  • Type of key to generate ให้เลือก SSH-2 RSA
  • Number of bits in a generated key ให้ใส่ 2048 หรือ 4096 (ยิ่งเลขบิทมาก ยิ่งช่วยให้ถูก crack ด้วยวิธีการ brute-force ได้ยากขึ้น)
  • จากนั้นกดปุ่ม Generate เพื่อสร้าง Key ครับ
  • หลังจากกดปุ่ม Generate ให้เราเลื่อนเมาส์ของเราในกรอบ Key ไปมา … จนกว่าจะเต็ม 100% ครับ
  • เสร็จแล้ว เราจะได้ทั้ง private key และ public key มาครับ
  • ช่อง Key comment เราสามารถใส่ข้อความอะไรก็ได้ อาจจะไว้สำหรับช่วยจำ เพื่อช่วยในการระบุ Key pair ได้ครับ (key comment จะมีประโยชน์มาก เวลาเรามีหลาย key pair)
  • Key passphrase และ Confirm passphrase เราจะข้ามไปครับ
  • กดปุ่ม Save public key และตั้งชื่อไฟล์ (อาจจะเก็บไว้ที่คอมพิวเตอร์เราในโฟลเดอร์ my_keys)
  • กดปุ่ม Save private key และตั้งชื่อไฟล์ (อาจจะเก็บไว้ที่โฟลเดอร์เดียวกันกับ public key ได้…แต่ต้องมั่นใจว่าจะไม่มีใครเข้าถึงได้ และห้ามทำหายเด็ดขาด! ถ้าเราปิดการเข้าถึงด้วย username/password แล้ว ถ้าทำ private key หาย ก็จะ Login ไม่ได้อีกเลย)
  • คลิ๊กขวาที่ช่อง Public key for pasting into OpenSSH authorized_keys file แล้วเลือก Select All
  • คลิ๊กขวาอีกครั้งแล้วเลือก Copy หรือกด Ctrl + C

Step 2 : เก็บ Public Key ไว้ที่ Raspberry Pi

  • Log in เข้าไปที่ Raspberry Pi ด้วยการ SSH ปกติ (PuTTY)
  • ถ้ายังไม่มี Folder SSH ให้ทำการสร้างขึ้นมา ด้วยคำสั่ง
mkdir ~/.ssh
chmod 0700 ~/.ssh
touch ~/.ssh/authorized_keys
chmod 0644 ~/.ssh/authorized_keys
  • วาง SSH public key ที่เรา Copy ไว้เมื่อสักครู่ ใน ~/.ssh/authorized_keys
  • พิมพ์คำสั่ง sudo nano ~/.ssh/authorized_keys
  • คลิ๊กขวาที่ terminal เพื่อเป็นการวาง
  • จากนั้นทำการเซฟแล้วออกมาได้ครับ ด้วยการ Ctrl+X กด Y แล้วกด Enter ครับ
  • เสร็จแล้วครับ…ปิด Terminal (PuTTY) แล้วออกมาได้เลยครับ

Step 3 : ตั้งค่า PuTTY

เปิดโปรแกรม PuTTY ขึ้นมาครับ เลือกไปที่

  • สร้าง Session ใหม่ โดยการใส่
  • Host Name ซึ่งก็คือ IP ของ Raspberry Pi ของเรา
  • Port คือ 22
  • จากนั้น Save
  • ที่แถบเมนูซ้ายมือ ให้เข้าไปที่ Connection > Data
  • ในช่อง Auto-login username ให้เราใส่ username ที่จะใช้ในการ login เข้าไปครับ
  • ที่แถบเมนูซ้ายมือ ให้เข้าไปที่ Connection >SSH > Auth
  • ให้ทำการ browse ไปยังตำแหน่งไฟล์ private key ที่เราทำการสร้างและเก็บไว้ใน Step 1
  • กลับมาที่ Session ให้กด Save Session เพื่อบันทึกการทั้งค่านี้ไว้ใช้สำหรับเข้าใช้งานครั้งถัดไป
  • เราสามารถเข้าใช้งาน SSH Key ได้ด้วยการกดปุ่ม Open โดยจะเข้าไปที่ Raspberry Pi โดยที่เราไม่ต้องพิมพ์ Username/Password อีกต่อไป
  • เสร็จแล้วครับ SSH Key

Step 4 : ปิดการเข้าใช้งานด้วย Username/Password

ขั้นตอนสุดท้ายคือการปิด ไม่ให้เข้าใช้งานได้ด้วย Username/Password ครับ

  • เข้าไปแก้ไขไฟล์ sshd_config ด้วยคำสั่ง sudo nano /etc/ssh/sshd_config
  • หาบรรทัด PasswordAuthentication และ UsePAM โดยแก้ไขไฟล์ให้เป็นดังนี้
[...]
PasswordAuthentication no
[...]
UsePAM no
[...]
  • แก้ไขไฟล์ PasswordAuthentication เป็น no
  • แก้ไขไฟล์ UsePAM เป็น no
  • ลองเข้าด้วยวิธี SSH ปกติ ก็จะเข้าไม่ได้แล้วครับ

อ้างอิง

--

--

Sathittham (Phoo) Sangthong
SS Blog

Hi! It's me Phoo! I’m a Software Developer 👨‍💻 , a Startup Entrepreneur 📱 and a Runner 🏃 . Currently, I’m a Co-Founder and CTO of a Startup name “Urbanice”.