06 June 2012

ssh/scp โดยไม่ต้องใช้ password

เนื่องจากผมใช้ rsync (ผ่าน scp) เป็นเครื่องมือหลักสำหรับสำรองข้อมูล โดยเก็บไว้ที่ server ซึ่งทำได้ง่ายโดยใช้คำสั่ง

$ rsync -avz --delete Documents cholwich@xxx.com:Backup

การทำงานแบบนี้โดยปกติ จะต้องใส่ password เพื่อ login เข้าไปที่ server ที่เราต้องการเอาไฟล์ไปวางไว้ ถ้าไม่ต้องการใส่ password ทุกครั้ง ก็สามารถทำได้โดยใช้ keypair สำหรับ authentication โดยเอา public key ไปวางไว้ที่ server และคนที่มี private key เท่านั้นที่จะสามารถ login เข้าไปได้โดยไม่จำเป็นต้องใส่ password

ขั้นตอนการตั้งค่า

  1. สร้าง keypair
    $ ssh-keygen -t rsa
    
    ระบุให้เก็บ keypair ไว้ที่ ~/.ssh/ โดยไม่ต้องระบุ passphrase เมื่อเสร็จแล้วจะได้ไฟล์มา 2 ไฟล์ คือ id_rsa เก็บ private key และ id_rsa.pub เก็บ public key
  2. เอาไฟล์ id_rsa.pub ไปวางไว้ที่ฝั่ง server โดยเอาไปต่อท้ายไฟล์ ~/.ssh/authorized_keys ซึ่งเป็นไฟล์สำหรับเก็บรายการของ key ที่ใช้ authentication
    $ cat id_rsa.pub >> ~/.ssh/authorized_keys
    
    หรือ ถ้ายังไม่มีไฟล์นี้อยู่ ก็เปลี่ยนชื่อไฟล์ id_rsa.pub ให้เป็นชื่อ authorized_keys เลย ก็ได้
    $ mv id_rsa.pub ~/.ssh/authorized_keys
    
    (จริงๆ คำสั่งแรกคำสั่งเดียว ก็ครอบคลุมทั้งสองกรณีอยู่แล้ว)

เพียงเท่านี้ ครั้งต่อไปที่เราเชื่อมต่อไปยัง server ก็จะไม่จำเป็นต้องใช้ password อีกแล้ว แต่ยังไงก็คงต้องเก็บรักษา private key เอาไว้ให้ดีๆ ถ้าจะย้ายไปใช้เครื่องอื่น หรือ install เครื่องใหม่ ก็แค่เอา private key กลับไปวางไว้ที่ .ssh ของเราในเครื่อง client ก็พอแล้ว

2 comments:

Nuke said...

rsync แบบไม่ใส่ "-e ssh" มันไม่ใช่วิ่งไปหา rsync daemon เหรอครับ (port 873) ซึ่งก็ไม่น่าเกี่ยวกับ ssh แล้ว ไม่แน่ใจครับ ไม่เคยใส่ใจรายละเอียดของ rsync

Unknown said...

ไม่นะ ปกติผมก็ใช้อย่างนี้มาตลอด ใช้กับ local directory ก็ได้ด้วย คิดว่าน่าจะเลือกได้จากรูปแบบ destination ล่ะ