Quản lý nhiều tài khoản GitHub và GitLab trên cùng một máy tính với SSH config

Git tutorial - IT technology blog
Git tutorial - IT technology blog

Nỗi khổ khi “ôm” nhiều repo từ GitHub đến GitLab

Làm việc song song cho công ty (GitLab) và dự án cá nhân (GitHub) là chuyện thường tình. Nhưng nếu phải quản lý thêm 2-3 tài khoản khách hàng khác nhau, bạn rất dễ rơi vào cảnh “dở khóc dở cười” vì nhầm lẫn permission. Phổ biến nhất là lỗi 403 Forbidden khi push code. Tệ hơn, bạn lỡ commit bằng email cá nhân vào repository công ty, khiến lịch sử Git trông cực kỳ thiếu chuyên nghiệp.

Trước đây, mình thường dùng HTTPS để clone repo. Mỗi lần push lại phải nhập username hoặc Personal Access Token (PAT) rất phiền phức. Sau khi chuyển hẳn sang SSH config, mình tiết kiệm được ít nhất 10-15 phút loay hoay mỗi ngày. Hệ thống sẽ tự nhận diện tài khoản dựa trên “alias” (tên giả) bạn đặt ra, giúp tách biệt hoàn toàn môi trường làm việc.

Cốt lõi của vấn đề: Tại sao phải dùng SSH Config?

Mặc định, khi kết nối tới GitHub qua SSH, máy tính sẽ tìm đến file ~/.ssh/id_rsa để xác thực. Tuy nhiên, GitHub không cho phép dùng chung một public key cho hai tài khoản khác nhau. Ngay cả khi bạn tạo hai key riêng, SSH client cũng không đủ thông minh để tự chọn key phù hợp vì cả hai đều trỏ về cùng một host github.com.

SSH Config giải quyết việc này bằng cách tạo ra các bí danh (aliases). Thay vì dùng github.com, bạn sẽ dùng github-personal hoặc github-work. Dựa vào bí danh này, máy tính sẽ biết chính xác cần lôi “chìa khóa” nào ra để trình diện với server.

Hướng dẫn thực hành chi tiết

Bước 1: Tạo các SSH Key riêng biệt

Đừng bao giờ dùng một key cho mọi thứ. Kinh nghiệm của mình là mỗi tài khoản nên có một cặp key riêng. Hãy ưu tiên thuật toán ed25519 vì nó bảo mật và gọn nhẹ hơn rsa cũ kỹ.

# Key cho tài khoản cá nhân
ssh-keygen -t ed25519 -C "[email protected]" -f ~/.ssh/id_ed25519_personal

# Key cho tài khoản công ty
ssh-keygen -t ed25519 -C "[email protected]" -f ~/.ssh/id_ed25519_work

Hãy nhớ dùng tham số -f để đặt tên file khác nhau, tránh việc ghi đè lên các key cũ đang hoạt động.

Bước 2: Thêm Public Key vào GitHub/GitLab

Bạn cần copy nội dung file .pub để dán vào phần Settings SSH trên trình duyệt. Bạn có thể dùng lệnh cat hoặc pbcopy (trên macOS) để lấy mã nhanh chóng:

cat ~/.ssh/id_ed25519_personal.pub
# Copy toàn bộ đoạn mã và dán vào GitHub cá nhân của bạn

Bước 3: Cấu hình file SSH Config

Đây là bước then chốt. Hãy mở (hoặc tạo mới) file tại đường dẫn ~/.ssh/config bằng lệnh:

nano ~/.ssh/config

Sau đó, hãy điền cấu hình theo mẫu dưới đây:

# GitHub cá nhân
Host github.com-personal
    HostName github.com
    User git
    IdentityFile ~/.ssh/id_ed25519_personal

# GitHub công việc
Host github.com-work
    HostName github.com
    User git
    IdentityFile ~/.ssh/id_ed25519_work

# GitLab công ty
Host gitlab.com-work
    HostName gitlab.com
    User git
    IdentityFile ~/.ssh/id_ed25519_work

Trong đó: Host là tên gợi nhớ bạn tự đặt, HostName là địa chỉ thật của server, và IdentityFile trỏ thẳng đến private key tương ứng.

Bước 4: Cách Clone và Push thực tế

Sai lầm phổ biến nhất nằm ở bước này. Bạn không được copy nguyên văn link SSH từ GitHub mà phải sửa lại phần host theo đúng tên bạn đã đặt trong file config.

Ví dụ, link gốc là: [email protected]:user/repo.git
Bạn sẽ clone bằng lệnh:

git clone [email protected]:user/repo.git

Nếu dự án đã nằm sẵn trên máy, hãy cập nhật lại URL remote để không phải làm lại từ đầu:

git remote set-url origin [email protected]:user/repo.git

Tránh lỗi “râu ông nọ chắp cằm bà kia” với Git Config

SSH config giúp bạn vượt qua rào cản truy cập, nhưng nó không tự sửa user.name hay user.email. Một sơ suất nhỏ cũng có thể khiến lịch sử commit của công ty hiện tên tài khoản cá nhân “meo-con-9x”, trông rất lệch tông.

Lời khuyên của mình là đừng bao giờ set email ở mức global (--global). Thay vào đó, hãy cấu hình riêng cho từng dự án:

git config user.name "Your Name"
git config user.email "[email protected]"

Nếu muốn chuyên nghiệp hơn, bạn có thể tìm hiểu tính năng includeIf trong file .gitconfig. Nó cho phép tự động đổi email dựa trên folder dự án, ví dụ ~/work/ thì dùng email công ty, ~/personal/ thì dùng email cá nhân.

Kinh nghiệm thực chiến

Mình đã áp dụng quy trình này cho toàn bộ team dev và thấy nó hoạt động cực kỳ ổn định. Dưới đây là 3 lưu ý nhỏ để bạn không gặp rắc rối:

  • Kiểm tra kết nối: Hãy thử lệnh ssh -T [email protected] trước khi bắt đầu. Nếu thấy thông báo “Hi username!” là bạn đã thành công.
  • SSH Agent: Đôi khi máy tính sẽ “quên” key sau khi khởi động lại. Đừng quên add key vào agent bằng lệnh ssh-add nếu gặp lỗi xác thực.
  • Đặt tên Host: Hãy chọn tên ngắn gọn, dễ phân biệt nhưng tránh trùng hoàn toàn với tên miền thật để không gây nhiễu khi truy cập web.

Thiết lập SSH config chỉ mất 5 phút nhưng mang lại sự an tâm tuyệt đối. Bạn sẽ không còn phải loay hoay fix lỗi permission hay thấp thỏm sợ nhầm tài khoản mỗi khi push code nữa.

Bạn có gặp khó khăn gì khi cấu hình không? Hãy để lại bình luận phía dưới, mình sẽ hỗ trợ giải đáp ngay.

Share: