Bài viết được dịch từ: jr0cket.co.uk

Khi bạn clone, push và pull các thay đổi giữa các Github repository và có 2 giao thức để lựa chọn là https và ssh. Bạn sẽ sử dụng cái nào và tại sao?

Đây là một hướng dẫn ngắn gọn cho cả https và ssh và lý do tại sao bạn lại chọn cái này mà không phải cái kia.

Yêu cầu chung

Bất kể bạn sử dụng giao thức mạng nào với Github, việc đầu tiên bạn cần làm là cấu hình tên và địa chỉ email để sử dụng với các commit của bạn. Để cấu hình bạn sử dụng 2 lệnh sau:

git config --global user.name "YOUR NAME"
git config --global user.email "YOUR EMAIL ADDRESS"

 Địa chỉ email nên giống với cái đã sử dụng để tạo tài khoản Github của bạn.

Bạn có thể đọc chi tiết hơn ở đây.

Github khuyến khích HTTPS

HTTPS được khuyến khích bởi Github, vì nó là một giao thức (có cổng) được mở trong tất cả các firewall, vì thế Github có thể truy cập dễ dàng khi sử dụng HTTPS. Nó cũng đòi hỏi rất ít thiết lập. Tất cả những gì bạn cần là một tài khoản Github và cấu hình Git với tên và email của bạn (giống như đã hướng dẫn ở phần trên).

Tuy nhiên, mỗi lần bạn clone, fetch, pull hoặc push tới một remote Github repository sử dụng HTTPS bạn cần cung cấp username và password.

Caching thông tin của bạn

Có thể cache username và password của bạn trong một khoảng thời gian nhất định, và bạn chỉ cần nhập chúng một lần duy nhất trong khoảng thời gian này.

# Set git to use the credential memory cache
git config --global credential.helper cache
# Set the cache to timeout after 1 hour (setting is in seconds)
git config --global credential.helper 'cache --timeout=3600'

Bạn cũng có thể sử dụng một khoảng thời gian timeout cao hơn nếu cần.

Đọc thêm về caching password ở đây.

Ngoài ra, có thể lưu trữ lâu dài thông tin của bạn trên disk sử dụng lệnh git config credential.helper store, tuy nhiên đây là một lựa chọn tồi vì nó sẽ lưu password của bạn trong một văn bản thông thường và bất kỳ ai cũng có thể đọc nó. Nếu bạn sử dụng xác thực 2Factor cho tài khoản Github (tôi hi vọng bạn làm điều đó) thì bạn sẽ cần tạo một token truy cập cá nhân và sử dụng nó thay cho password.

Khả năng lộ tài khoản của bạn

Với HTTPS bạn đang sử dụng cùng username và password với tài khoản Github, vì thế nếu những thông tin này bị ai đó nhìn thấy hoặc copy, thì họ có thể truy cập vào tài khoản Github của bạn. Và họ có thể thay đổi password tài khoản của bạn, mạo danh bạn để submit các pull request độc hại hay các issue, gây ảnh hưởng tới danh tiếng của bạn.

Tôi khuyến khích SSH

SSH bảo mật hơn và thuận tiện hơn HTTPS. Mặc dù SSH có thể bị chặn, nhưng gần như tất cả các mạng tôi đã sử dụng trong 5 năm qua đều có cổng SSH mở.

Với SSH bạn tạo một cặp public/private key cho mỗi máy tính bạn sử dụng để kết nối tới Github. Bạn copy public key tới tài khoản Github và khi bạn push một thay đổi tới Github nó được đánh dấu với private key của bạn vì thế Github biết rằng bạn push nó. Điều này cần thêm một chút thiết lập, nhưng sau đó bạn sẽ không bao giờ cần cung cấp username và password khi truy cập tới các Github repository.

Bảo mật hơn

SSH Keys bảo mật hơn vì nó không yêu cầu các thông tin để truy cập tới tài khoản Github của bạn. Nếu một ai đó lấy được private key của bạn thì họ có thể làm một số thứ với các repository của bạn (Ví dụ: force push một repository rỗng, nó sẽ xóa history của bạn).

Nếu key của bạn bị đánh cắp, bạn vẫn có thể truy cập tới tài khoản Github và cập nhật Github profile để xóa bất kỳ key nào bị mất hoặc bị đánh cắp.

Tạo các keys

Bạn có thể tạo cặp public/private key cho SSH bằng cách sử dụng lệnh ssh-keygen cái có sẵn trên tất cả các hệ điều hành. Khi tạo cặp key cho SSH tôi khuyến khích bạn thêm một comment là địa chỉ email từ tài khoản Github của bạn:

ssh-keygen -t rsa -C my-github@email.com

Sử dụng SSH khi nó bị chặn bởi mạng

SSH có thể sử dụng cổng của HTTPS nếu mạng của bạn đang chặn cổng SSH. Bạn chỉ cần sửa file ~/.ssh/config và thêm phần này:

Host github.com
  Hostname ssh.github.com
  Port 443

Bây giờ bạn sử dụng SSH để kết nối tới Github thông qua cổng 443 của HTTPS.

Bạn có thể đọc chi tiết hơn tại đây.

Tổng kết

Tôi thường sử dụng SSH với cặp public/private key. Nó chỉ mất vài phút để thiết lập và bạn sẽ có một cách bảo mật để sử dụng Github, giúp tránh nguy cơ bị lộ thông tin tài khoản. Ngay cả khi SSH bị chặn bởi mạng, bạn vẫn có thể dễ dàng cấu hình SSH để sử dụng thông qua cổng của HTTPS.

Nếu bạn sử dụng HTTPS thì cần phải sử dụng xác thức 2Factor để bảo vệ tài khoản Github của bạn. Nếu muốn lưu trữ thông tin của bạn cho HTTPS, hãy đảm bảo password của bạn được lưu trữ dưới dạng mã hóa.