Một trong những vấn đề mà lập trình viên hay gặp phải là việc làm việc với nhiều khách hàng khác nhau, trên cùng GitLab hay GitHub, nhưng yêu cầu sử dụng thông tin Committer khác nhau.
Đây là một tình huống mình gặp phải và muốn chia sẻ cùng mọi người. Hai khách hàng cùng sử dụng hệ thống GitLab, và mỗi bên đều muốn mình sử dụng 1 tài khoản GitLab riêng.
- GitLab Client 1 – kevin@client1.com
- GitLab Client 2 – kevin@client2.com
1 SSH Key không thể cùng thêm vào 2 tài khoản GitLab hoặc cùng GitHub được.
Cách xử lý vấn đề nhiều SSH key như trên?
Tạo (Generate) các SSK key riêng cho mỗi tài khoản
Câu lệnh thì rất đơn giản. Mở Git Bash (trong Windows), hoặc mở Terminal trong trình duyệt ra, chuyển vào folder chứa SSH key.
ssh-keygen -t rsa -b 4096
Khi gõ dòng lệnh trên, sẽ hiện ra 1 số câu hỏi.
Bạn lưu ý cần đặt tên cho file khác nhau cho mỗi lần tạo key, ví dụ ở đây là “client1” và “client2”.
Kết quả của 2 lần gõ trên là có các file sau:
Folder chứa SSH key trên máy tính Windows và Mac OSX
Trên Macbook, mở Terminal, gõ dòng lệnh sau:
cd ~/.ssh/
Trên máy tính Windows
%USERPROFILE%\.ssh // Mở cmd ra gõ
# Hoặc vào bằng File Explorer
C:/Users/<username>/.ssh
Kết quả sau khi tạo key là bạn có các file sau
client1
client1.pub
client2
client2.pub
Cấu hình SSH config để sử dụng nhiều SSH key
Nếu bạn sử dụng Mac, file này có thể được tạo ở path:
~/.ssh/config
Còn nếu bạn dùng Windows:
Đây là một file batch, nên bạn có thể sửa bằng “vi editor” hoặc Notepad++.
Giờ chúng ta sẽ cần cấu hình như sau:
Host client1.gitlab.com
HostName gitlab.com
User git
IdentityFile ~/.ssh/client1
PreferredAuthentications publickey
Host client2.gitlab.com
HostName gitlab.com
User git
IdentityFile ~/.ssh/client2
PreferredAuthentications publickey
Hãy để ý tới mục “Host” khác nhau, và mục “HostName” giống nhau. Điều này tức là khi bạn clone source hoặc add remote thì sẽ như sau:
Client 1:
git remote add origin git@client1.gitlab.com:client1/shopify.git
Client 2:
git clone git@client2.gitlab.com:client2/wp.git
Vậy là bạn đã hoàn tất phần cài đặt để sử dụng các SSH key khác nhau trên các tài khoản có chung Git server (như GitLab, GitHub, BitBucket).