ssh-keygen: password-less ssh

วันนี้เราจะมาทำให้การใช้ ssh (Secure shell) ในการเชื่อมต่อเข้าไปใช้งานอีกเครื่องหนึ่ง เราจะต้องล็อกอินด้วยการกรอกพาสเวิร์ด อย่างเช่น เรามีเครื่องอยู่สองเครื่อง A กับ B

เรากำลังทำงานอยู่บนเครื่อง A อยากเชื่อมต่อเข้าไปใช้เครื่อง B เราก็ใช้คำสั่ง

pop@computer-a (/usr/home/pop) # ssh pop@computer-b
The authenticity of host ‘computer-b (10.89.88.98)’ can’t be established.
RSA key fingerprint is 20:7a:2d:4c:fb:c6:a3:f1:5b:60:6b:ca:51:9e:bb:70.
Are you sure you want to continue connecting (yes/no)? yes
Warning: Permanently added ‘computer-b,10.89.88.98’ (RSA) to the list of known hosts.
Password: กรอกพาสเวิร์ด

จากนั้นเราก็จะสามารถเข้าไปใช้เครื่อง B ได้ แต่ปัญหามันมันไม่ได้อยู่ตรงนี้ ปัญหาของเราคือถ้าเรามี account เดียวกันบนทั้งสองเครื่อง แล้วเรา login เข้าเครื่องแรกได้แล้วจะขอต่อไปอีกเครื่อง ทำไมจะต้องมานั่งกรอกพาสเวิร์ดอีกรอบหล่ะ แล้วถ้าหลุดออกมาจะต่อใหม่ก็ต้องกรอกใหม่ (ขี้เกียจนั่นเอง)

Public & Private key

ดังนั้นแทนที่เราจะใช้การกรอกพาสเวิร์ด เราก็จะมาสร้างอะไรซักอย่างเป็นตัวแทนของพาสเวิร์ดนั่นแทนสิ ซึ่งสิ่งนี้เราเรียกว่า คีย์ (จะว่ากุญแจก็ได้นะ) แต่กุญแจเราต้องมีสองดอกนะที่สร้างมาคู่กัน

  • ดอกแรกเป็น private key หรือกุญแจลับที่มีเฉพาะเราคนเดียว
  • ดอกที่สองเป็น public key หรือก็คือกุญแจที่เราแจกให้คนอื่น ๆ (ปั๊มแจกได้)

ข้อมูลที่ล็อกด้วย public key จะไขได้ด้วย private key ที่คู่กันเท่านั้น และในทางกลับกัน private key ก็จะไขได้ด้วย public key

ตัวอย่าง นายเอ ต้องการส่งข้อมูลลับให้นายบี นายซีก็จะส่งข้อมูลลับให้นายบี แต่จะทำยังไงดีให้นายบีดูได้คนเดียว ก็เอาง่าย ๆ อย่างนี้เลยละกัน นายบีก็แจก public key ส่งไปให้ทั้งนายเอ และนายซี ทั้งนายเอและนายซีก็จะเอากุญแจนั้นไปล็อกกล่องแล้วส่งมาให้นายบี ซึ่งระหว่างทางถ้านายเอได้กล่องจากนายซีก็จะเปิดดูไม่ได้เพราะไม่มีกุญแจที่ใช้ไข หรือที่เราเรียกว่า private key ดังนั้นจะมีนายบีที่เป็นเจ้าของกุญแจนั้นเท่านั้นที่เปิดได้ และในทางกลับกัน ถ้านายบีต้องการส่งข้อมูลให้ทุกคนที่เป็นพวกเดียวกัน (คนที่มีกุญแจ public key ที่เคยแจกให้) นายบีก็จะล็อกด้วย private key แล้วส่งให้ทั้งเอ และซี ทั้งเอและซีก็จะเปิดได้เพราะมีกุญแจที่นายบีเคยให้ไว้แล้ว

ssh-keygen

เกริ่นมายาวเชียวยังไม่เข้าเรื่องที่จะเขียนเลย มาเข้าเรื่องกันดีกว่า นั่นก็คือเราจะใช้เจ้า คีย์ ที่ว่าเนี่ยแหละแทนการกรอกพาสเวิร์ด โดยอาศัย ssh-keygen ในการสร้าง public และ private key ตามนี้

pop@computer-a (/usr/home/pop/.ssh) # ssh-keygen -t rsa
Generating public/private rsa key pair.
Enter file in which to save the key (/usr/home/pop/.ssh/id_rsa): enter ไปเลย
Enter passphrase (empty for no passphrase): enter อีกรอบ
Enter same passphrase again: enter อีกครั้ง
Your identification has been saved in /usr/home/pop/.ssh/id_rsa.
Your public key has been saved in /usr/home/pop/.ssh/id_rsa.pub.
The key fingerprint is:
44:71:7c:a4:42:85:6c:ec:c6:73:66:7d:bf:41:06:d4 pop@computer-a

เราจะได้

  • private key อยู่ที่ /usr/home/pop/.ssh/id_rsa ซึ่งเราไม่ต้องไปทำอะไรกับมัน
  • public key อยู่ในไฟล์ /usr/home/pop/.ssh/id_rsa.pub ซึ่งเราจะต้องเอาไปแจกเครื่องที่เราอยากจะ ssh เข้าไป หน้าตาค่าใน id_rsa.pub จะประมาณนี้
ssh-rsa AAAAB3NzaC1yc2EAAAABIwAAAIEA1l40A450ScXX/KrL6cEGz6ZpeTWr5PeiRZweJ1g0cbN6HRF8mJpx5xX5uRsOte09bvztuIxThBGXVnf8qfqWNL1qaF8RS0xvLGjW/sE0jJFcEA3C3gc7SQ1knguFQffeM3oOTicH37n5s5ETNorY4aNaZrRpDHioOb/n6qHnlPs= pop@computer-a

นั่นก็คือเราใช้เครื่องเอ อยาก ssh ไปเครื่องบี ซี ดี เราก็สร้าง private key ไว้ที่ เอ เอา public key ไปแจกเครื่องบี ซี ดี แล้วเอาไปใส่ไว้ที่ไหนหล่ะ ให้เอาไปไว้ที่

~/.ssh/authorized_keys

นั่นก็คือให้เราก็อปค่า public key ในไฟล์ /usr/home/pop/.ssh/id_rsa.pub ที่ได้เมื่อกี้นี้มาเพิ่มลงในไฟล์นี้ที่อยู่บนเครื่องอื่น ๆ ทีนี้เราก็จะไม่ต้องกรอกพาสเวิร์ดอีกแล้ว

ทีนี้ถ้าเราอยากจะทำให้เครื่องอื่นเข้ามาที่เครื่องเอได้ด้วย เราก็ต้องทำกลับกันคือสร้าง คีย์ เครื่องนั้นแล้วเอา public key มาแจกเครื่องเอ (เพิ่มค่า public key ลงใน authorized_keys ของเครื่องเอ)

สรุป

จะ ssh เครื่องเอไปเครื่องบี สร้าง คีย์ ที่เครื่องเอ ด้วย ssh-keygen แล้วจะได้ private key และ public key ให้เอาค่า public key ไปเพิ่มไว้ที่ authorized_keys ของเครื่องบี

อ้างอิง:
ssh-keygen: password-less SSH login
3 Steps to Perform SSH Login Without Password Using ssh-keygen ssh-copy-id
Public-key cryptography
เทคโนโลยีกุญแจสาธารณะ

Advertisements

Leave a Reply

Fill in your details below or click an icon to log in:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out / Change )

Twitter picture

You are commenting using your Twitter account. Log Out / Change )

Facebook photo

You are commenting using your Facebook account. Log Out / Change )

Google+ photo

You are commenting using your Google+ account. Log Out / Change )

Connecting to %s