Để quản lý đồng thời nhiều tài khoản SSH trên cùng một thiết bị (áp dụng cho GitHub/GitLab/Bitbucket hoặc kết nối nhiều máy chủ), giải pháp cốt lõi là tạo cặp khóa riêng cho từng tài khoản và định nghĩa các Host ảo trong tập tin ~/.ssh/config để liên kết với khóa tương ứng.
Tạo khóa riêng cho từng tài khoản
Sử dụng thuật toán Ed25519 (nhẹ, an toàn, hỗ trợ sẵn):
# Tài khoản GitHub cá nhân
ssh-keygen -t ed25519 -C "tai-khoan-ca-nhan" \
-f ~/.ssh/id_ed25519_github_ca_nhan
# Tài khoản GitHub công ty
ssh-keygen -t ed25519 -C "tai-khoan-cong-ty" \
-f ~/.ssh/id_ed25519_github_cong_ty
Lưu ý: Nên đặt mật khẩu bảo vệ khóa riêng (passphrase). Đảm bảo quyền truy cập đúng: chmod 700 ~/.ssh và chmod 600 ~/.ssh/id_* (tệp .pub có thể để 644).
Thêm khóa vào ssh-agent (tùy chọn)
macOS:
eval "$(ssh-agent -s)"
ssh-add --apple-use-keychain ~/.ssh/id_ed25519_github_ca_nhan
ssh-add --apple-use-keychain ~/.ssh/id_ed25519_github_cong_ty
Linux/WSL/Git Bash:
eval "$(ssh-agent -s)"
ssh-add ~/.ssh/id_ed25519_github_ca_nhan
ssh-add ~/.ssh/id_ed25519_github_cong_ty
Cấu hình ~/.ssh/config (bước quan trọng)
Định nghĩa các Host ảo để phân biệt tài khoản:
# Tài khoản GitHub cá nhân
Host github-ca-nhan
HostName github.com
User git
IdentityFile ~/.ssh/id_ed25519_github_ca_nhan
IdentitiesOnly yes
# Tài khoản GitHub công ty
Host github-cong-ty
HostName github.com
User git
IdentityFile ~/.ssh/id_ed25519_github_cong_ty
IdentitiesOnly yes
# Ví dụ máy chủ riêng
Host may-chu-admin
HostName 192.0.2.5
User quantri
IdentityFile ~/.ssh/id_ed25519_admin
IdentitiesOnly yes
Host may-chu-ung-dung
HostName 192.0.2.5
User ung_dung
IdentityFile ~/.ssh/id_ed25519_ung_dung
IdentitiesOnly yes
Tham số IdentitiesOnly yes ngăn lỗi "Quá nhiều lần xác thực thất bại" bằng cách giới hạn chỉ sử dụng khóa được chỉ định.
Thêm khóa công khai vào hệ thống
- GitHub: Dán nội dung
~/.ssh/id_ed25519_github_*.pubvào Settings → SSH and GPG keys - Máy chủ: Thêm vào
~/.ssh/authorized_keyscủa tài khoản đích
Sao chép nhanh lên clipboard:
# macOS
pbcopy < ~/.ssh/id_ed25519_github_ca_nhan.pub
# Linux
xclip -selection clipboard < ~/.ssh/id_ed25519_github_ca_nhan.pub
Kiểm tra kết nối
ssh -T git@github-ca-nhan
ssh -v may-chu-admin
Kết quả thành công với GitHub sẽ hiển thị thông báo xác thực thành công.
Sử dụng với Git
Cách 1: Clone bằng Host ảo
git clone git@github-ca-nhan:tenban/tenduan.git
git clone git@github-cong-ty:tochuc/tenduan.git
Cách 2: Tự động chuyển đổi theo thư mục
Trong ~/.gitconfig:
[includeIf "gitdir:~/du-an-cong-ty/"]
path = ~/.gitconfig_cong_ty
Tập tin ~/.gitconfig_cong_ty:
[user]
name = Ten Cong Ty
email = ten@congty.com
[url "git@github-cong-ty:"]
insteadOf = https://github.com/
insteadOf = git@github.com:
Tất cả thao tác Git trong thư mục ~/du-an-cong-ty/ sẽ tự động sử dụng tài khoản công ty.
Xử lý sự cố thường gặp
- Lỗi "Permission denied": Kiểm tra lại
Hosttrong URL, quyền tập tin khóa, và trạng thái đăng ký khóa trên máy chủ - Lỗi "Quá nhiều lần xác thực": Đảm bảo có
IdentitiesOnly yesvà chỉ khai báo đúngIdentityFile - Ép dùng khóa riêng cho repository: Chạy lệnh trong thư mục dự án:
git config core.sshCommand 'ssh -i ~/.ssh/id_ed25519_github_cong_ty -o IdentitiesOnly=yes'