ตั้งค่าหลาย SSH keys ในคอมเครื่องเดียว

ในปัจจุบันผมมีความจำเป็นต้องใช้งาน Git repo หลายที่มาก เช่น github หรือ gitlab หรือ gitlab private server และการเข้าถึง git repo ให้ปลอดภัยเราจำเป็นต้องใช้ ssh key เข้ามาช่วย ใครยังใช้งานผ่าน user password ปกติเลิกได้เลย

และในแต่ละ git repo ก็มี ssh key ที่ไม่เหมือนกันอีก ผมเลยมีความจำเป็นต้องตั้งค่าให้เครื่องตัวเองสามารถใช้งาน ssh key ได้หลายอันพร้อมกัน ตอน git clone หรือ git push จะได้สะดวก

โดยในตัวอย่างผมจะกำหนดแบบนี้ personal = Github และ work = Gitlab

1. ไปยัง ssh folder

$ cd ~/.ssh

2. สร้าง ssh key ขึ้นมา

$ ssh-keygen -t rsa -C "name@personal_email.com"
$ ssh-keygen -t rsa -C "name@work_email.com"

พอขั้นตอนที่ถามว่า Enter file in which to save the key เราก็กำหนดชื่อไฟล์ไปตามต้องการ เราก็จะได้มา อย่างละ 4 ไฟล์ เช่น

# .ssh/
.
├── personal_email
├── personal_email.pub
├── work_email
└── work_email.pub

3. สร้าง config ไฟล์

ไฟล์ config จะเป็นตัวกำหนดว่า เวลาเราเรียกใช้ git command ไปที่ repo ไหน ให้ไปเรียกไฟล์ ssh key ไฟล์ไหน โดยทำการสร้างไฟล์ชื่อ config ไว้ใน .ssh ก็จะเป็น

# .ssh/
.
├── config
├── personal_email
├── personal_email.pub
├── work_email
└── work_email.pub

ในไฟล์ config กำหนดดังนี้

Host gitlab gitlab.com
    HostName gitlab.com
    IdentityFile ~/.ssh/work_email # private key
    User snappytux
    IdentitiesOnly yes
Host github github.com
    HostName github.com
    IdentityFile ~/.ssh/personal_email # private key
    User snappytux
    IdentitiesOnly yes

4. นำ .pub ไปใส่ไว้ใน account เราบน git repo

ลองใช้คำสั่ง cat work_email.pub เราจะได้ข้อมูลประมาณนี้

ssh-rsa AAAAB3NzaC1yc2xxxxx name@work_email.com

ก็นำค่าของ work_email.pub และ personal_email.pub ไปใส่ใน github และ gitlab ได้เลย

5. ทดสอบ git clone

ลองไป clone มาจาก gitlab ด้วย ssh ซึ่งจะเป็นประมาณนี้

$ git clone git@gitlab.com:twinsyn/foobar/foobar-api.git

หรือ github

$ git clone git@github.com:snappytux/foobar.git

เราก็จะสามารถใช้งานได้แล้ว