SonTran's avatar
Son Tran
TIPS

Cấu hình nhiều SSH key cho các workspace khác nhau

Cấu hình nhiều SSH key cho các workspace khác nhau
0 views
7 min read
#TIPS

1. Giới thiệu về SSH và SSH Key

SSH là gì?

SSH (Secure Shell) là một giao thức mạng được sử dụng để thực hiện các kết nối an toàn giữa máy tính cá nhân của bạn và máy chủ từ xa. SSH được sử dụng phổ biến trong việc quản lý máy chủ, truy cập các dịch vụ từ xa, và thực hiện các tác vụ quản lý hệ thống. Khi kết nối với SSH, dữ liệu sẽ được mã hóa, giúp đảm bảo bảo mật cho kết nối của bạn.

SSH Key là gì?

SSH key là một cặp khóa mã hóa (gồm một private key và một public key) dùng để xác thực an toàn khi kết nối tới các máy chủ từ xa mà không cần sử dụng mật khẩu. Phương pháp này không chỉ bảo mật hơn mà còn giúp việc kết nối nhanh hơn và thuận tiện hơn.

Cặp khóa SSH

  1. Private Key: Được lưu giữ cẩn thận trên máy tính cá nhân và không được chia sẻ cho bất kỳ ai. Nó được sử dụng để xác minh danh tính của bạn.
  2. Public Key: Được chia sẻ với máy chủ mà bạn muốn kết nối. Máy chủ sử dụng public key này để xác minh bạn có đúng private key tương ứng hay không.

Khi bạn thực hiện kết nối SSH, máy chủ sẽ gửi một thách thức mã hóa bằng public key của bạn. Nếu bạn có private key đúng, bạn có thể giải mã thách thức đó, và kết nối sẽ được xác thực.

Tại sao nên sử dụng SSH key?

  • Bảo mật hơn mật khẩu: Sử dụng SSH key giúp giảm thiểu rủi ro bị tấn công bởi các cuộc tấn công brute-force (thử mật khẩu liên tục) do chỉ có những ai có private key mới có thể truy cập.
  • Không cần nhập mật khẩu nhiều lần: Sau khi thiết lập SSH key, bạn sẽ không cần nhập lại mật khẩu mỗi lần kết nối. Nếu bạn bảo vệ private key bằng passphrase, bạn chỉ cần nhập passphrase một lần khi khởi động phiên làm việc.
  • Phù hợp cho nhiều môi trường: SSH key có thể được sử dụng trong nhiều môi trường khác nhau, như quản lý máy chủ từ xa hoặc kết nối với các dịch vụ Git như GitHub, GitLab.

Khi bạn làm việc trong môi trường lập trình với nhiều dự án đến từ các workspace khác nhau, chẳng hạn như một dự án cá nhân và một dự án công ty, bạn sẽ cần phải sử dụng nhiều tài khoản Git khác nhau. Điều này yêu cầu cấu hình nhiều SSH key để dễ dàng xác thực vào các dịch vụ như GitHub, GitLab, Bitbucket, mà không cần phải liên tục đăng nhập hoặc thay đổi cấu hình mỗi lần làm việc.

Trong bài viết này, tôi sẽ hướng dẫn bạn cách cấu hình nhiều SSH key cho các tài khoản khác nhau và tránh những lỗi thường gặp.

2. Tạo SSH key cho mỗi workspace

Đầu tiên, bạn cần tạo SSH key cho từng tài khoản của bạn. Giả sử bạn cần tạo một key cho tài khoản cá nhân và một key cho tài khoản công ty.

Chạy các lệnh sau để tạo SSH key:

Tạo SSH key cho tài khoản cá nhân

ssh-keygen -t rsa -b 4096 -C "your_personal_email@example.com" -f ~/.ssh/id_rsa_personal

Tạo SSH key cho tài khoản công ty

ssh-keygen -t rsa -b 4096 -C "your_company_email@company.com" -f ~/.ssh/id_rsa_company

Sau khi tạo xong, bạn sẽ có 2 cặp file key (id_rsa_personal, id_rsa_personal.pubid_rsa_company, id_rsa_company.pub) nằm trong thư mục ~/.ssh.

3. Thêm SSH key vào ssh-agent

Để quản lý các SSH key, bạn cần thêm chúng vào ssh-agent. Trước tiên, khởi động ssh-agent:

eval "$(ssh-agent -s)"

Sau đó, thêm từng SSH key vào:

  • Thêm key cá nhân
ssh-add ~/.ssh/id_rsa_personal
  • Thêm key công ty
ssh-add ~/.ssh/id_rsa_company

4. Cấu hình ~/.ssh/config

Để git có thể biết sử dụng SSH key nào cho từng repository khác nhau, bạn cần cấu hình file ~/.ssh/config. Dưới đây là ví dụ về cách cấu hình cho tài khoản GitLab và GitHub, một cho cá nhân và một cho công ty:

# Tài khoản cá nhân (GitLab)
Host gitlab.com-personal
    HostName gitlab.com
    User git
    IdentityFile ~/.ssh/id_rsa_personal
    IdentitiesOnly yes

# Tài khoản công ty (GitLab)
Host gitlab.com-company
    HostName gitlab.com
    User git
    IdentityFile ~/.ssh/id_rsa_company
    IdentitiesOnly yes

# Tài khoản cá nhân (GitHub)
Host github.com-personal
    HostName github.com
    User git
    IdentityFile ~/.ssh/id_rsa_personal
    IdentitiesOnly yes

# Tài khoản công ty (GitHub)
Host github.com-company
    HostName github.com
    User git
    IdentityFile ~/.ssh/id_rsa_company
    IdentitiesOnly yes

Lưu ý:
Host: Đây là tên alias, bạn có thể tự định nghĩa nó. Ví dụ: gitlab.com-personalgitlab.com-company.
HostName: Tên máy chủ thực tế (ví dụ: gitlab.com, github.com).
IdentityFile: Đường dẫn đến SSH key bạn muốn sử dụng cho tài khoản này.

5. Sử dụng git clone với SSH alias

Sau khi cấu hình ~/.ssh/config, bạn có thể clone repository bằng cách sử dụng các alias bạn đã định nghĩa trong file config.

  • Clone repository cho tài khoản cá nhân (GitLab):
git clone gitlab.com-personal:username/repository.git
  • Clone repository cho tài khoản công ty (GitLab):
git clone gitlab.com-company:company_name/repository.git

Tương tự, bạn có thể sử dụng alias cho GitHub theo cách tương tự.

6. Các lỗi thường gặp và cách khắc phục

  1. Lỗi Could not resolve hostname:
  • Nguyên nhân: Khi bạn gặp lỗi này, thường là do bạn nhập sai alias trong lệnh git clone.
  • Giải pháp: Đảm bảo rằng alias bạn sử dụng trong lệnh git clone khớp với alias trong file ~/.ssh/config. Ví dụ, nếu bạn đã đặt alias là gitlab.com-personal, thì lệnh clone phải là git clone gitlab.com-personal:username/repository.git.
  1. Lỗi Permission denied (publickey):
  • Nguyên nhân: SSH key chưa được thêm vào ssh-agent hoặc chưa được thêm vào tài khoản Git của bạn (GitLab, GitHub).
  • Giải pháp: Chạy lệnh ssh-add ~/.ssh/id_rsa_personal hoặc ssh-add ~/.ssh/id_rsa_company để thêm key vào ssh-agent. Ngoài ra, kiểm tra xem SSH public key (id_rsa.pub) đã được thêm vào tài khoản Git của bạn chưa.
  1. Lỗi The project you were looking for could not be found or you don't have permission to view it:
  • Nguyên nhân: Bạn không có quyền truy cập vào repository hoặc đang sử dụng SSH key sai.
  • Giải pháp: Đảm bảo bạn đã chọn đúng SSH key tương ứng với tài khoản có quyền truy cập repository, và bạn đã được cấp quyền truy cập vào dự án.
  1. Lỗi Could not read from remote repository:
  • Nguyên nhân: SSH key không hợp lệ hoặc không được thêm vào tài khoản Git của bạn.
  • Giải pháp: Kiểm tra file ~/.ssh/config xem đường dẫn đến IdentityFile có đúng không. Chạy lệnh ssh -T git@github.com-company hoặc ssh -T git@gitlab.com-company để kiểm tra kết nối.

7. Tổng kết

Việc cấu hình nhiều SSH key cho các workspace khác nhau là rất quan trọng khi bạn làm việc với nhiều dự án ở các môi trường khác nhau. Bằng cách sử dụng ~/.ssh/config một cách chính xác, bạn có thể dễ dàng quản lý nhiều tài khoản mà không gặp rắc rối khi chuyển đổi giữa các SSH key.

Nếu gặp bất kỳ lỗi nào, hãy kiểm tra kỹ cấu hình của bạn và sử dụng các lệnh kiểm tra kết nối để đảm bảo rằng SSH key của bạn đã được thêm đúng cách.

Chúc bạn thành công!