วิธีทำ Password-less SSH บน Ubuntu

ในการทำงานกับ Server Cluster ขนาดใหญ่ ซึ่งประกอบด้วย Ubuntu Server จำนวนมาก หากต้องแก้ไขระบบทั้งหมด โดยการ Secure Shell หรือ SSH เข้าไปทีละเครื่อง “โดยต้องเป็น root ด้วย” จะเป็นงานที่ใช้เวลาอย่างมาก เค้าจึงมีระบบที่เรียกว่า Password-less SSH โดยการแลกเปลี่ยน Public Key แทนที่จะต้อง Login ด้วย Username/Password

และเนื่องจาก Ubuntu โดย Default ไม่มีการสร้าง root password (มี root แต่ไม่มี password –> ก็เลย Login ไม่ได้ด้วย Password) ซึ่งก็ดีในเรื่องของ Security แต่ทำให้การทำงานยุ่งยากนิดหน่อย

บทความนี้จะกล่าวถึงวิธีการทำ Password-less SSH รวมไปถึง การที่ไม่ต้องถาม Known Host ในครั้งแรกที่เข้าใช้งานด้วย โดยระบบจะประกอบด้วย server01 เป็นเครื่องที่จะสั่งการเครื่อง server02 … serverNN ในสิทธิ์ root และในระบบนี้ ทุกเครื่องมี user ชื่อ mama ซึ่งมีสิทธิ์ sudo

ที่เครื่อง server01

  1. ใช้คำสั่งต่อไปนี้ เพื่อสร้าง Public/Private rsa key pair
    ssh-keygen

    จะได้ผลดังนี้

    ซึ่งจะได้ไฟล์มา 2 file อยู่ใน directory: ~/.ssh
    – id_rsa
    – id_rsa.pub

  2. เพื่อไม่ให้การ SSH ไปยังเครื่องใหม่ๆ มีการถาม Known Host แบบนี้ แล้วก็ต้องคอยตอบ yes ทุกเครื่องไป

    ก็ให้สร้างไฟล์ .ssh/config ว่า (วิธีนี้จะมีผลเฉพาะ mama เท่านั้น) หรือสร้างใน /etc/ssh/ssh_config เพื่อให้มีผลทั้งระบบ

    Host *
     StrictHostKeyChecking no
     UserKnownHostsFile=/dev/null
  3. จากนั้น ให้เอาไฟล์ Public Key คือ  .ssh/id_rsa.pub  ไปยังเครื่องปลายทาง ในที่นี้คือ server02 (ใช้วิธี scp ไปยัง mama@server02)
    scp .ssh/id_rsa.pub mama@server02:~

    ในครั้งแรกนี้ ยังต้องใส่ Password ของ mama บนเครื่อง server02 อยู่
    จากนั้น ไปดำเนินการต่อใน server02

ที่เครื่อง server02

  1. ใน home directory ของ mama บน server02 จะมีไฟล์ id_rsa.pub อยู่ ลองตรวจสอบโดยใช้คำสั่ง
    ls -l /home/mama/id_rsa.pub
  2. เปลี่ยนเป็น root ด้วยคำสั่ง
    sudo su

    แล้ว เข้าไปใน root home directory ด้วยคำสั่ง

    cd
  3. สร้าง directory .ssh และ สร้างไฟล์ .ssh/authorized_keys โดยนำข้อมูลในไฟล์ /home/mama/id_rsa.pub มาต่อท้าย
    mkdir .ssh
    cat /home/mama/id_rsa.pub >> .ssh/authorized_keys
  4. เพื่อความปลอดภัย ตั้งค่า Permission ให้ถูกต้อง
    chmod 700 .ssh
    chmod 600 .ssh/authorized_keys

 

จากนั้น ลองทดสอบ ssh จาก mama บน server01 ไปยัง root บน server02

ssh root@server02

ก็จะไม่มีการถาม Password และ ไม่ถาม Known Host อีก

หลังจากนี้ สามารถ clone เครื่อง server02 ไปเป็นเครื่องต่างๆได้เลย