Việc phải nhập mật khẩu mỗi khi dùng định clone project bằng https từ github đã làm bạn đủ bực mình rồi, mà giờ bạn lại còn phải đổi qua đổi lại giữa 2 tài khoản để clone được project mà mình muốn nữa thì có nhọc không cơ chứ.
Đọc xong bài viết này, bạn sẽ không còn cần nhập thêm một lần mật khẩu nào cho github của bạn nữa.
Để sử dụng nhiều tài khoản github trên cùng một máy tính và không cần nhập mật khẩu mỗi lần chuyển qua lại giữa 2 tài khoản, thì chúng ta cần sử dụng xác thực bằng SSH, vì theo mình biết thì không thể dùng HTTPS làm điều này được (bạn nào biết cách làm được thì chỉ mình với ).
Nếu bạn còn đang mơ hồ về SSH, mình khuyến khích các bạn đọc bài viết giải thích SSH của mình. Mình tin rằng sau khi hiểu được cách mà SSH hoạt động, bạn sẽ hiểu được tường tận từng bước chúng ta làm trong bài viết này.
Do đây là bài viết follow up cho bài viết giải thích SSH cua mình, nên mình chủ đích viết một cách ngắn gọn, và mặc định bạn đã hiểu về SSH, cũng như tại sao cần thêm public key để setup SSH trên github.com rồi nhé!
Tóm tắt
Giả sử bạn có 2 tài khoản github, một tài khoản cá nhân và một tài khoản dùng cho công việc, các bước setup sẽ là như sau:
- Bước 1: Bạn dùng câu lệnh tạo ra 2 cặp public - private key trên máy tính của bạn, mỗi cặp sẽ được sử dụng cho một tài khoản.
- Bước 2: Bạn lên trang chủ github.com, đăng nhập vào từng tài khoản, vào phần setup SSH, upload public key tương ứng lên.
- Bước 3: Bạn config máy tính của mình để nó tự biết với tài khoản nào thì cần dùng public key nào.
- Bước 4 (optional): Bạn thêm câu lệnh ssh-add vào file .zshrc hoặc .bashrc để câu lệnh này tự chạy mỗi khi bạn mở shell, không cần phải gõ lại mỗi lần bật máy nữa.
Đó là 4 bước để bạn setup thành công nhiều nhiều tài khoản github cho cùng một máy tính. Bây giờ mình sẽ vào chi tiết từng bước nha:
Bước 1: Tạo public - private key
Bạn mở terminal (trên mac), hoặc bash shell (trên windows), hoặc bất cứ loại shell nào các bạn thích lên, cd vào thư mục ~/.ssh, và dùng câu lệnh sau để tạo ra một cặp public - private key:
ssh-keygen -t rsa
Bạn sẽ thấy shell hỏi bạn muốn đặt tên cặp key là gì. Tên mặc định là id_rsa.
Nếu bạn chưa từng tạo key trên máy mình bao giờ thì để như thế cũng ok, nhưng để tránh nhầm lẫn thì mình sẽ đặt tên cho từng cặp key cụ thể hơn chút. Cặp đầu tiên mình sẽ đặt tên là id_rsa_work, để dùng cho tài khoản công việc.
Tiếp đến bạn sẽ được hỏi muốn nhập password là gì. Bạn thích thì nhập cũng được, nhưng theo mình thì không nên nhập, vì nó sẽ ảnh hưởng đến bước số 4, lát nữa mình sẽ giải thích thêm.
Để tạo key mà không có password thì bạn chỉ cần nhấn enter là được.
Mở thư mục ~/.ssh lên, bạn sẽ thấy xuất hiện 2 file mới:
- id_rsa_work: đây là private key
- id_rsa_work.pub: chính là public key.
Vậy là xong một cặp key rồi, mình sẽ tạo nhanh một cặp key nữa, lần này mình sẽ đặt tên là id_rsa_personal, để dùng cho tài khoản cá nhân, cũng không có password.
Và ta thấy thư mục ~/.ssh đã có 2 cặp key.
Bước 2: Setup cho github.com
Tiếp theo, bạn mở github.com, đăng nhập vào tài khoản cá nhân, rồi vào Settings -> SSH and GPG keys -> New SSH Key, rồi chọn đường dẫn đến file id_rsa_personal mà bạn vừa tạo.
Đặt tên là gì tùy bạn, nhưng mình khuyến khích các bạn đặt tên theo tên máy tính mà bạn sử dụng để cho dễ phân biệt.
Sau khi xong, bạn log out và đăng nhập vào tài khoản dùng cho công việc, và làm tương tự, nhưng lần này bạn upload file id_rsa_work.
Vậy là phần setup trên github.com đã xong.
Bước 3: Tạo file config
Giờ bạn cần config để máy tính của bạn tự biết khi nào thì dùng public key nào.
Để làm được điều này, bạn lại vào thư mục ~/.ssh, tạo một file tên là config (không có extension). Sau đó bạn mở file config này lên và điền đoạn này vào:
(mình giả sử bạn có 2 tài khoản là test-account-personal và test-account-work)
Host github.com-test-account-personal HostName github.com User test-account-personal IdentityFile ~/.ssh/id_rsa_personal Host github-test-account-work HostName github.com-test-account-work User test-account-work IdentityFile ~/.ssh/id_rsa_work
Save file lại, thế là xong.
Giờ bạn hãy tự thử nghiệm bằng cách clone project từ cả 2 account về xem có được không?
Khả năng là không được, vì mặc dù bạn đã tạo 2 cặp key và setup trên github.com nhưng SSH Agent của bạn lại chưa có 2 cặp key này.
SSH Agent là gì? Bạn có thể hiểu đơn giản đấy là một program để quản lý các key lưu trữ trên máy của bạn. Khi bạn muốn kết nối với github bằng SSH, SSH Agent sẽ gửi public key của bạn cho github. Nếu SSH Agent không có key thì lấy cái gì mà gửi .
Để thêm key vào SSH Agent, bạn lại cd vào ~/.ssh và gõ lệnh sau:
ssh-add id_rsa_personal
ssh-add id_rsa_work
Như vậy là bạn đã thêm 2 key vào SSH Agent. Giờ hãy thử test lại xem, bạn đã clone được project từ cả 2 account rồi đúng không?
Có một điểm cần lưu ý, đó là SSH Agent lưu trữ key trong memory. Điều này nghĩa là khi bạn tắt máy đi khởi động lại, bạn sẽ phải add lại key vào SSH Agent.
Cứ mối lần khởi động lại là lại phải gõ 2 dòng ssh-add kia thì thật là mệt nhọc, do đó mình thường config để shell tự chạy 2 dòng đó mỗi lần mở shell lên. Để config, bạn làm như sau:
- cd vào thử mục root, tìm file .zshrc, hoặc .bashrc nếu bạn sử dụng bash (các file này thường bị ẩn, bạn phải setting thư mục cho hiện file ẩn thì mới thấy được)
- Mở file .zshrc hoặc .bashrc lên, thêm 2 dòng ssh-add bên trên vào. Vậy là xong.
Đây cũng là lí do ở bước 1 mình nói không nên để password cho key, vì dù bạn có để password thì cũng sẽ phải lưu password đó trong file .zshrc, như vậy người khác vào máy bạn là đọc được password luôn rồi, thà không để còn hơn, nhỉ?
Do đây là bài follow up cho bài viết giải thích về SSH của mình, nên mình chủ ý viết thật ngắn gọn. Nếu bạn muốn hiểu rõ hơn về những gì mình vừa làm, chẳng hạn như tại sao lại phải tạo ra public - private key và add lên github, và tại sao add xong một cái là lại authenticate được luôn, thì mời các bạn quay lại đọc bài viết giải thích SSH của mình nha .