All Articles

Add SSH key vào Github và set SSH cho HTTPS repo

github-ssh-key-1

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 🙄

Đâ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 KeyPublic 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 đó.

github-ssh-key-2

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 githubgithub.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!

github-ssh-key-3