Wednesday, June 30, 2021

Set remote ssh by public key authentication on Ubuntu 20.04

  • ประเด็นคือจะใช้ scp ใน shell script โดยใช้ private key ในการ login ssh

Step

  • บนเครื่อง client เราจะสร้าง key ที่ฝั่งนี้นะ

$ ssh-keygen

  • มันจะให้เราตั้งชื่อ key เขงเรา ถ้าไม่ใส่แล้ว enter เราจะได้ private key คือ  id_rsa และ public key คือ  id_rsa.pub

Output

Generating public/private rsa key pair.

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

  • ถ้ามันมีไฟล์ชื่อนี้อยู่แล้วมันจะแสดงแบบนี้

Output

/home/your_home/.ssh/id_rsa already exists.

Overwrite (y/n)?

  • ใส่ passphrase อะไรก็ได้ หรือ ไม่ใส่ก็ได้ (ผู้เขียนแนะนำไม่ใส่นะคับ เพราะถ้าใส่แล้ว ก็ต้องใช้ passphrase แทน password อยู่ดี) แล้ว enter ได้เลย

Output

Enter passphrase (empty for no passphrase):

  • ได้ผลลัพธ์แบบนี้คือ เรียบร้อย

Output

Your identification has been saved in /your_home/.ssh/id_rsa

Your public key has been saved in /your_home/.ssh/id_rsa.pub

The key fingerprint is:

SHA256:/hk7MJ5n5aiqdfTVUZr+2Qt+qCiS7BIm5Iv0dxrc3ks user@host

The key's randomart image is:

+---[RSA 3072]----+

|                .|

|               + |

|              +  |

| .           o . |

|o       S   . o  |

| + o. .oo. ..  .o|

|o = oooooEo+ ...o|

|.. o *o+=.*+o....|

|    =+=ooB=o.... |

+----[SHA256]-----+

  • จากนั้น ให้เราทำการ คัดลอกข้อมูลใน id_rsa.pub คัดลอกไปวางไว้ ที่ไฟล์บน server ทำได้ 2 แบบ 
  • แบบแรกด้วย ssh-copy-id

$ ssh-copy-id username@remote_host

  • คำสั่งนี้มันจะทำการคัดลอกข้อมูลใน id_rsa.pub ไปวางในไฟล์ username@remote_host:~/.ssh/authorized_keys
  • แบบสอง manual copy content to server
  • คือให้เราคัดลอกข้อมูลใน  id_rsa.pub  ไปวางที่ไฟล์ authorized_keys บน server ที่เราจะ remote ไป พาธจะอยู่ประมาณนี้ /root/.ssh/authorized_keys หรือ /home/username/.ssh/authorized_keys 
  • ทดสอบที่ฝั่ง client remote โดยใช้ private key

$ ssh -i ~/.ssh/id_rsa username@remote_host

  • หรือเราจะได้ map drive ด้วย private key โดย

$ sudo sshfs -o IdentityFile=~/.ssh/id_rsa username@xxx.xxx.xxx.xxx:/ /mnt/droplet

Add

  • private key (id_rsa) อันนี้เราเอาไปใช้ที่ client เครื่องอื่น ได้เลย โดยไม่ต้องไปสร้าง key สำหรับ client ใหม่ให้เสียเวลา
  • อีกเรื่อง คือ private key default ที่เราสร้างขึ้นโดยไม่ใส่ชื่อ คือ id_rsa (Ubuntu 18.04 client สร้าง)
  • ปกเราจะใช้ ssh remote แบบนี้ ในกรณีใช้ public key authen
$ ssh -i /home/user/.ssh/id_rsa user@remotehost

$ scp -i /home/user/.ssh/id_rsa /localpath/file.txt remoteuser@remotehost:/path/copyto/ 

$s 

  • แต่เราสามารถใช้โดยไม่ต้องระบุ -i ได้เลย
$ ssh user@remotehost

$ scp /localpath/file.txt remoteuser@remotehost:/path/copyto/  

  • เข้าใจว่า เรา login userใหนอยู่มันจะไปหา private key ค่าเริ่มต้น ในที่นี้คือ /home/user/.ssh/id_rsa เลือกใช้ให้อัตโนมัติเลย
  • กรณีที่เราตั้งชื่อ  private key เป็นชื่ออื่นเราต้องใช้ -i ตามด้วยพาธไฟล์ private คือ ด้วยนะ
  • หรือ private key ใช้ชื่อ id_rsa อยู่แต่พาธไฟล์ไม่ได้อยุ่ภายใต้ /home/user/.ssh/ แบบนี้ก็ต้องใช้ option -i ด้วยเหมือนกรณีด้านบน

Ref

  • https://www.digitalocean.com/community/tutorials/how-to-set-up-ssh-keys-on-ubuntu-20-04
  • https://blog.inslash.com/how-to-use-sshfs-to-mount-remote-file-systems-over-ssh-5562de89b80b

No comments:

Post a Comment