วันศุกร์ที่ 25 มีนาคม พ.ศ. 2548

ssh-agent และ ssh-add

ต่อจากเรื่องการใช้ public key และ private key กับ ssh ที่เคยเขียนไปแล้ว. วิธีหนึ่งสำหรับการล็อกอินโดยที่ไม่ต้องใส่พาสเฟรส (passpharse) เองคือการสร้าง public key และ private key โดยมีพาสเฟรสว่างเปล่า. ถ้าไม่อยากให้พาสเฟรสว่างเปล่าและไม่อยากใส่กรอกพาสเฟรสเองเวลาล็อกอินผ่าน ssh ต้องใช้ ssh-agent ช่วย.

ssh-agent เป็นโปรแกรมที่รันช่วงต้นๆของ X เซสชันสำหรับเก็บ private key ไว้ใช้ authenticate เวลาล็อกอินแบบใช้ public key ไปหาเครื่องอื่น. ถ้าลองดูโปรเซสด้วย pstree จะเห็นแบบนี้ครับ.

$ pstree
...
     |-gdm---gdm-+-X
     |           `-sh-+-sh---xscreensaver
     |                |-ssh-agent
     |                `-xfce4-session
...
ในกรณีนี้ผมใช้ gdm เป็นตัวล็อกอินแบบกราฟิกแล้วมันจะรัน ssh-agent ให้อยู่แล้วโดยอัตโนมัติ. ถ้าดูจากไฟล์ปรับแต่งที่เกี่ยวข้องกับ gdm จะเห็นเป็นแบบนี้.
$ cat /etc/X11/gdm/Xsession
# add ssh-agent if found
sshagent="`which ssh-agent 2>/dev/null`"
if [ -n "$sshagent" ] && [ -x "$sshagent" ] && [ -z "$SSH_AUTH_SOCK" ]; then
    command="$sshagent -- $command"
elif [ -z "$sshagent" ] ; then
    echo "$0: ssh-agent not found!"
fi
คือมีการสำรวจว่ามี ssh-agent หรือไม่. ถ้ามีก็รันโปรแกรม ssh-agent ให้โดยอัตโนมัติ.

โปรแกรม ssh-agent เป็นเอเจนต์เก็บ private key ซึ่งผู้ใช้ต้องใส่ private key (ตัวโปรแกรมจะถามพาสเฟรส) ให้กับ ssh-agent ด้วยคำสั่ง ssh-add.

$ ssh-add 
Enter passphrase for /home/poonlap/.ssh/id_dsa:
Identity added: /home/poonlap/.ssh/id_dsa (/home/poonlap/.ssh/id_dsa)
ตัวเอเจนต์จะจำพาสเฟรสในช่วงเวลาที่จำกัด. ถ้ามีการล็อกอินหาเครื่องอื่นๆผ่าน ssh และใช้ public key, ssh-agent จะทำหน้าที่จัดการเกี่ยวกับการ authentication. ผู้ใช้ไม่ต้องใส่พาสเฟรสเองอีกถ้า ssh-agent ยังจำพาสเฟรสได้อยู่.

ไม่มีความคิดเห็น: