เป็นบทความเก่าที่เขียนไว้ตั้งแต่ปี 2556
สภาพแวดล้อมระบบ จำลองโดยใช้ VMware 2 ตัว
OS : ubuntu 12.04-server
VM : ssh-client
IP : 192.168.1.35
User : elastic
SSH Application : openssh-server
OS : ubuntu 12.04 server
VM : ssh-server
IP : 192.168.1.34
User : elastic
SSH Application : openssh-server
- จัดเตรียม client และ server โดยที่ทำการติดตั้ง openssh-server เป็นที่เรียบร้อยทั้ง 2 เครื่อง
- สร้าง key
เอาไว้ที่ client
ซึ่งจะได้ทั้ง private key และ public key - copy
public key ไปไว้ที่ server
- login เข้าใช้งาน server โดยใช้ private key ที่อยู่บน client เข้ารหัส / ถอดรหัสกับ public key ที่อยู่บน server
- เข้าใช้งานได้
ขอสมมติ ว่าทั้ง 2 VM ได้ติดตั้ง openssh-server เป็นที่เรียบร้อยแล้ว
$ sudo apt-get install openssh-server
- ให้ทำการสร้าง key ขึ้นมา ด้วยคำสั่ง ssh-keygen
$ ssh-keygen [-b bits-length (default 2048)] -t algorithm-type [-f output-file-name]
จากนั้นใส่ passphress หรือ password ลงไปครับ
การใช้งานบางอย่าง ไม่แนะนำให้เป็น empty password หรือ password ว่าง เพราะเอาไว้ใช้ป้องกัน private key จากการที่ผู้อื่นเอา private key ของเราไปใช้งานครับ
-f ถ้าไม่ใส่ default จะเป็น ~/.ssh/id_rsa (private key
) กับ ~/.ssh/id_rsa.pub (public key
)
จากภาพ ทำการสร้าง key ชื่อ elastic-key ขนาด 2048 bit ชนิด rsa (default ตอนนี้คือ rsa2) ไว้ที่ folder ~/.ssh/
- ใช้คำสั่ง ls ดูผลลัพธ์ที่เกิดขึ้นใน folder ~/.ssh จะมี 2 file ปรากฏขึ้นมา ได้แก่
elastic-key
ซึ่งเป็นprivate key
และelastic-key.pub
ซึ่งเป็นpublic key
ลองดูเนื้อหาภายในของทั้ง 2 file โดยใช้คำสั่ง cat
~/.ssh/elastic-key
~/.ssh/elastic-key.pub
- กำหนด permission ให้กับ key file โดยให้
elastic-key (private key)
เป็น600
คือ เจ้าของสามารถอ่าน เขียน ได้ ส่วนelastic-key.pub (public key)
เป็น644
คือ เจ้าของสามารถอ่าน เขียน ได้ ส่วนคนอื่น อ่านได้อย่างเดียว
- ทำการ copy elastic-key.pub (public key) ไปไว้บน server ด้วยคำสั่ง
scp (secure-copy)
อย่าลืม : (colon) หลัง target host ไม่อย่างนั้น คำสั่งจะไม่ทำงานครับ
- ลองเข้าไปดูที่ /home/elastic จะมี file
elastic-key.pub
โผล่ขึ้นมา
- จากนั้น ทำการย้าย elastic-key.pub ไปไว้ใน /home/elastic/.ssh/ แล้วเปลี่ยนชื่อเป็น
authorized_keys
แล้วก็กำหนด permission ให้ด้วย
เหตุผลที่ต้องย้ายและกำหนดชื่อเป็น authorized_keys ก็เพื่อให้เป็นไปตาม file config /etc/ssh/sshd_config
โดย default มันจะถูกเก็บไว้ใน %h/.ssh/authorized_keys
(จากภาพถูก comment ไว้ แต่ค่า AuthorizedKeyFile โดย default แล้วจะเป็น %h/.ssh/authorized_keys)
- ลองเข้าใช้งาน ssh-server แบบปกติดูครับ จะเห็นว่า มันจะติด permission denied (publickey)
ลองใหม่ ด้วยการ อ้างไปที่ private key ของ client ด้วยคำสั่ง
$ ssh [-i private-key-file-location] username@target-host
แล้วก็ใส่ passphress หรือ password ที่เราเคยตั้งไว้ในขั้นตอนที่ 1 ลงไปครับ
แค่นี้ ก็สามารถ เข้าใช้งาน ssh-server ด้วย public/private key ได้แล้วครับ
เป็นบทความที่ถูกย้ายมาจาก https://na5cent.blogspot.com/2013/11/ssh-keys-linux-ubuntu.html ซึ่งผู้เขียน เขียนไว้เมื่อ วันอาทิตย์ที่ 17 พฤศจิกายน พ.ศ. 2556