Quản Lý Nhiều Tài Khoản SSH Trên Máy Tính Đơn: Cấu Hình và Triển Khai

Để 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 ~/.sshchmod 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_*.pub vào Settings → SSH and GPG keys
  • Máy chủ: Thêm vào ~/.ssh/authorized_keys củ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 Host trong 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 yes và chỉ khai báo đúng IdentityFile
  • É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'

Thẻ: SSH-config Git-authentication Ed25519 Key-management Multi-account

Đăng vào ngày 28 tháng 6 lúc 06:23