Pages

6/25/2013

สร้าง SSH Key สำหรับติดต่อกับเครื่อง EC2 แบบไม่ต้องพิมพ์รหัสผ่าน

สร้าง SSH Key สำหรับติดต่อกับเครื่อง EC2 แบบไม่ต้องพิมพ์พาสเวิร์ด


หมายเหตุ: ในที่นี้ใช้ EC2 ที่มี OS แบบที่เป็น Ubuntu-based นะครับ

ก่อนอื่น แก้ไขไฟล์ /etc/ssh/sshd_config เพื่อเปิดใช้งาน AuthorizedKeysFile ก่อน  เพื่อระบุว่า path ของไฟล์ที่เก็บ public key จะให้อ่านจากตรงไหน  โดยค่าปกติ จะเป็น

#AuthorizedKeysFile %h/.ssh/authorized_keys

ก็แค่เอา # ออก หรือจะเพิ่มต่อท้ายไฟล์ก็ได้ ด้วยคำสั่ง

sudo sh -c 'echo "AuthorizedKeysFile %h/.ssh/authorized_keys" >> /etc/ssh/sshd_config'

จริงๆจะต้องเช็คค่า สองตัวนี้ด้วยว่าเป็น yes รึเปล่า

RSAAuthentication yes
PubkeyAuthentication yes

ต่อจากนั้นก็สร้าง user
ในที่นี้ใช้ชื่อ anidear โดยจะสร้างให้มี group หลักเป็นชื่อของตัวเอง และเพิ่ม Group เสริมเป็น admin เพื่อที่จะสามารถใช้สิทธิ์ sudo ได้

sudo useradd -m -s /bin/bash anidear
sudo usermod -G admin anidear
sudo passwd anidear

แล้วใส่ รหัสผ่าน สำหรับ user นี้

ต่อมาก็เข้าไปใช้งาน user นี้ และสร้าง ssh key
su - anidear
ssh-keygen -t rsa -b 1024 

จะขึ้นว่า

Enter file in which to save the key (/home/anidear/.ssh/id_rsa): 

กรอกตำแหน่งที่จะเอาไฟล์ไว้ โดยมาตรฐานจะเป็น ~/.ssh/id_rsa  ถ้าโอเคอยู่แล้วก็กด enter ผ่านได้เลย

ต่อมาจะขึ้นว่า

Enter passphrase (empty for no passphrase):

ตรงนี้จะให้กรอกว่า รหัสผ่านสำหรับเปิดใช้ไฟล์ key นี้ คืออะไร ซึ่งจะเป็นคนละตัวกับรหัสผ่านของ user ที่กรอกไว้ตอนใช้คำสั่ง passwd

แล้วก็เริ่มทำ ให้ ssh key ที่เพิ่งสร้างนี้ใช้งานได้

cd .ssh
cat id_rsa.pub >> authorized_keys
chmod 600 *
cat id_rsa

คัดลอกโค้ดรหัสผ่านตัวนี้ไว้(private key) เก็บลงในไฟล์ในเครื่องที่จะเป็น client (เช่นเก็บไว้ที่ ~/.ssh ของ client) หรือจะใช้ ftp,http,sftp ดึงไว้นี้เก็บไว้ก่อนก็ได้

เสร็จแล้วก็เคลียร์ไฟล์ทิ้ง
rm id_rsa{,pub}
exit

แล้วก็สั่ง service ssh reload ก็ เป็นอันเสร็จพิธี

ส่วนเวลาใช้งาน ก็คือ

สมมุติว่าเก็บ private key ไว้ที่ ~/keys/ec2_private_key
และ public hostname ของเครื่องเป็น ec2-1-1-1-1.ap-southeast-1.compute.amazonaws.com

ใช้ไฟล์ตรงๆเลย ก็จะเป็น
ssh -i  ~/keys/ec2_private_key anidear@ec2-1-1-1-1.ap-southeast-1.compute.amazonaws.com

แต่ถ้าเก็บ key เอาไว้ในระบบ(เครื่องตัวเอง) ก็ ใช้คำสั่ง ssh-add

ssh-add ~/keys/ec2_private_key

จะเป็นการเก็บ private key นี้ไว้ในระบบ ssh ของเครื่อง
ทำให้เวลาต่อไปหา server จะไม่ต้องระบุ path ของไฟล์ private key แล้ว

ssh  anidear@ec2-1-1-1-1.ap-southeast-1.compute.amazonaws.com

แต่เพื่อความสะดวก ยิ่งขึ้น
สามารถ แก้ไฟล์ ~/.ssh/config โดยเพิ่ม

Host anidear_at_ec2
 HostName ec2-1-1-1-1.ap-southeast-1.compute.amazonaws.com
 User anidear
 IdentityFile ~/keys/ec2_private_key

เมื่อทำเสร็จแล้ว ก็ login ตรงๆได้เลย โดยไม่ต้องระบุ username

ssh ec2-1-1-1-1.ap-southeast-1.compute.amazonaws.com

[Optional] 
เนื่องจากการตั้งให้ user ที่เพิ่งสร้างอยู่ในกลุ่ม admin
เวลาเรียกใช้งาน sudo ยังคงจะต้องใช้รหัสผ่านของ user อยู่
ถ้าต้องการให้ไม่ต้องใช้รหัสผ่านเลย ให้ไปสร้างไฟล์เพิ่ม

sudo sh -c 'echo "anidear ALL=(ALL) NOPASSWD:ALL" > /etc/sudoers.d/91-anidear'

[Optional2]
ssh-add จะใช้ private key ในการเพิ่ม key เข้าระบบ แต่จะใช้ public key ในการถอดออก
ดังนั้น ถ้าตอนเพิ่มใช้คำสั่ง

ssh-add ~/keys/ec2_private_key

ตอนถอนออก จะต้องไปดาวน์โหลด public key ที่คู่กับ private key ตัวนั้นออกมา
ในที่นี้ก็คือ ไปคัดลอกมาจาก ภายในไฟล์ ~/.ssh/authorized_keys ของ server
และสมมุติว่า เอามาแปะ และสร้างเป็นไฟล์ชื่อ ec2.pub
เวลาจะถอดออกจะใช้คำสั่ง

ssh-add -d ~/keys/ec2.pub



No comments:

Post a Comment