Github có lẽ không còn quá xa lạ đối với anh em developers và phần lớn chúng ta sử dụng Linux để phát triển sản phẩm. Tuy nhiên có một vấn đề khi làm việc với Github trên linux đó là Github luôn hỏi password khi chúng ta push code hoặc làm việc với private repo.
Mặc định trong Windows đã có Credential Manager, giúp chúng ta chỉ cần cung cấp username/password 1 lần duy nhất. Với linux thì lại khác, chúng không có cơ chế tự động nào để làm việc đó cả. Một số ae sẽ có giải pháp như sau
Cách 1 - Lưu credentials
git config --global credential.helper store
# Hoặc
git config --global user.password "your password"
Chúng ta chỉ cần cung cấp password và Git sẽ tự động lưu password cho chúng ta dưới dạng plaintext
tại ~/.gitconfig
. Tuy nhiên, sẽ là khá nguy hiểm nếu chúng ta lưu password như vậy. Bạn có biết trên NPM repo có hàng tá các scripts có thể trộm password của bạn bất cứ lúc nào
Cách 2 - Sử dụng Git credentials cache
git config --global credential.helper cache # Set git to use the credential memory cache
git config --global credential.helper 'cache --timeout=3600' # Set the cache to timeout after 1 hour (setting is in seconds)
Cách này thì bảo mật hơn, bằng cách cache lại password của bạn trong khoảng thời gian 1 tiếng - như ví dụ trên và mặc định là 15 phút nếu bạn không set timeout
. Và tất nhiên sau khoảng thời gian đó bạn phải nhập lại password 🙄
Cách 3 - Sử dụng SSH key (recommended)
Đây là phương thức đăng nhập được Github recommended, thay thế cho cách thức xác thực truyền thống là username/password. SSH key bao gồm Private Key
và Public Key
, hiểu đơn giản thì với Public Key
là ổ khóa ở trên cloud còn Private Key
là chìa khóa bạn đang nắm trong tay vậy
Các keys trên có thể tồn tại dưới dạng text hoặc file cùng với Keypharse
- là mật khẩu để protect cái chìa khóa của bạn. Phòng khi trường hợp Private Key
bị lộ thì hacker
cũng không sử dụng được key đó.
Fact: Và việc crack
được SSH Key với thuật toán RSA-4096 bits ở thời điểm hiện tại gần như là impossible kể cả đối với các siêu máy tính hay máy tính lượng tử
Chúng ta mở terminal và tạo SSH key như sau:
1. Generate SSH key
mkdir -p ~/Documents/keys && cd ~/Documents/keys # Tạo folder để chứa key
ssh-keygen -t rsa -b 4096 -C "your_email@example.com"
# tạo file có tên github (private key) và github.pub (public key)
> Enter a file in which to save the key (/home/you/.ssh/id_ed25519): github
# Đoạn này sẽ hỏi password cho key, bạn gõ password 2 lần
> Enter passphrase (empty for no passphrase): [Type a passphrase]
> Enter same passphrase again: [Type passphrase again]
2. Add SSH key
Lúc này trong folder sẽ có 2 file github
và github.pub
. Copy nội dung github.pub
và paste vào textbox key tại đây - xem thêm, đặt title cho key và click Add SSH key
. Tiếp theo, add SSH key vào ssh-agent
ssh-add ~/Documents/Keys/github
# Enter password đã set ở bước trên
> Enter passphrase (empty for no passphrase): [Type a passphrase]
3. Switch to SSH remote server
Các repos hiện tại của bạn đang sử dụng giao thức HTTPS để thực hiện sync code. Chúng ta cần đổi nó sang giao thức SSH để sử dụng được SSH Key.
Tại repo của bạn chúng ta chạy lệnh
git remote set-url origin git@github.com:<github_username>/<repo_name>.git
Nếu remotes của bạn có nhiều hơn 1 thì thay origin
bằng tên của remote của bạn. Chúng ta check lại bằng lệnh ssh -T git@github.com
Security best practices
Tăng cường bảo mật hơn nữa bằng những cách thức sau
- Ngăn các users khác access vào private key của bạn
chmod 400 ~/Documents/Keys/github # quyền chỉ đọc cho user hiện tại
- Sử dụng chung với Git credentials cache, như đã nói ở trên
Chúc các bạn thành công!