Trước hết chúng ta cần biết SSH là gì ?
SSH (Secure Socket Shell) là một giao thức mạng dùng để thiết lập kết nối mạng một cách bảo mật. SSH hoạt động ở lớp trên trong mô hình phân lớp TCP/IP.
SSH là một chương trình tương tác giữa máy chủ và máy khách có sử dụng cơ chế mã hoá đủ mạnh nhằm ngăn chặn các hiện tượng nghe trộm, đánh cắp thông tin trên đường truyền. Sử dụng SSH là biện pháp hữu hiệu bảo mật dữ liệu trên đường truyền từ hệ thống này đến hệ thống khác.
Vì nó là một giao thức mạng nên bất kể máy tính nào khi được cài đặt hệ điều hành cũng đều có thể chạy và sử dụng chương trình SSH này.
SSH Key là gì ?
SSH Key thì bạn có thể hiểu đơn giản là một kiểu chứng thực đối chiếu giữa người dùng (Private key) và máy chủ server/vps (Public key). Public key và Private key có mối quan hệ chặt chẽ với nhau để nhận diện mở khóa. Khi bạn tạo SSH Key sẽ có 2 file bao gồm là Public Key, file này bạn sẽ đưa lên máy chủ server/vps còn Private key bạn sẽ để ở máy tính cá nhân. Nói một cách dễ hiểu hơn Public key chính là ổ khóa còn Private key chính là chìa khóa và để mở được ổ khóa thì phải đúng chìa khóa thì mới mở được.

Quản lý source code sử dụng SSH Key như thế nào ?
Các trang quản lý source code hiện tại đang sử dụng GIT như (gitlab, github, bitbucket...) đang làm việc với ta như sau:
- Khi đăng ký tài khoản trên các trang thì ta được cấp một vùng trên hệ thống của họ, chúng ta có thể truy cập, phân quyền, đọc, ghi ... nội dung vào phân vùng này
- Khi chúng ta muốn đẩy một thứ gì đó lên phân vùng của chúng ta trên server của họ thì thường qua 2 phương thức chính là HTTPS và SSH, ở đây chúng ta chỉ nói về SSH
- Hệ thống của họ sẽ xác thực thông tin của bạn và nội dung bạn vừa đẩy lên và lưu lại.
Vậy SSH Key dùng ở đâu ?
Nó được xử dụng trong bước xác thực như chúng ta đã nói ở trên, vậy nó xác thực như thế nào ?
Đại khái là bên ông server(gitlab, github) sẽ lưu lại public key khi có một yêu cầu gửi (có chứa private key) đến ông ý sẽ cầm đống public key vừa rồi áp dụng vào thuật toán RSA trên để giải mã xem đây có đúng là bạn không.
Vậy làm thế nào để có SSH Key ?
Bước 1. Kiểm tra ssh key đã tồn tại trên máy (nằm ở thư mục gốc của user bạn đang đăng nhập vào máy)
Mở cửa sô dòng lệnh (cmd, terminal):
ls -al ~/.sshĐấy, chúng ta sẽ thấy các ssh key đã được tạo trước đó, nếu trông nó kiểu
id_rsa
id_rsa.pubTrông đó id_rsa chính là private key(không có đuôi) và id_rsa.pub là public key(có đuôi .pub) và giờ thì chúng ta có thể xác định nó là một cặp vì nó có tên giống nhau (id_rsa) và có cả private key và public key.
Nếu đã xuất hiện một cặp như vậy rồi thì chúng ta bước sang bước tiếp sang bước 3 luôn.
Còn nếu mà không xuất hiện bất cứ cặp khóa vào thì bạn phải tạo nó ra và cách thức sinh ra 1 cặp khóa như sau:
Bước 2. Sinh một SSH key mới
Mở terminal và gõ lệnh:
ssh-keygen -t rsa -b 4096 -C "[email protected]"Hoặc để đơn giản hơn bạn có thể gõ:
ssh-keygen -t rsaỞ những bước tiếp theo bạn có thể ấn Enter để bỏ qua (để mặc định), như vậy cho đỡ phức tạp hoặc nếu không bạn có thể nhập nếu bạn muốn.
Enter file in which to save the key (/root/.ssh/id_rsa): [Press enter]Ở đây là nơi bạn muốn lưu ssh key, bạn nhập enter thì nó sẽ mặc định lưu ở thư mục gốc của user bạn đang đăng nhập vào máy, ở đây của mình là (/root/.ssh/id_rsa). Mình thì ấn luôn Enter cho nhanh, nếu không bạn muốn thay đổi tên và thư mục chứa ssh key này thì có thể nhập vào.
VD: /home/.ssh/xoxo
Enter passphrase (empty for no passphrase): [Type a passphrase]Ở bước này sẽ nhập mật khẩu và nhập lại mật khẩu vừa nhập, mục đích là để lấy các Private key đã được mã hóa trực tiếp trên thiết bị của bạn.
Bạn có thể để trống và Enter để tiếp tục. Còn nếu bạn nhập thì vào thì nó sẽ không hiển thị mấy dấu *** như bình thường, nhưng bạn cứ gõ xong rồi Enter thôi. Bạn nên đặt mật khẩu đủ mạnh cho bạn nhé, nếu có mật khẩu thì sẽ bảo mật hơn.
Sau đó sẽ hiển thị
Your identification has been saved in /root/.ssh/id_rsa.Thì tức là bạn tạo thành công cặp private key và public key rồi, và đã được lưu tại /root/.ssh/id_rsa
Bước 3. Thêm SSH key của bạn vào ssh-agent
SSH agent (ssh-agent) là trình quản lý khóa SSH (SSH key manager) lưu trữ SSH key trong bộ nhớ của tiến trình (process) để người dùng có thể đăng nhập vào máy chủ SSH mà không cần phải nhập passphrase của khóa mỗi khi họ xác thực với máy chủ.
Đại khái là nếu thêm key của bạn vào ssh-agent thì mỗi lần pull code hay push code thì ssh key đã được thêm vào request tới ssh server đó rồi và chúng ta không cần nhập mật khẩu git hay gì nữa.\
Gõ lệnh sau để kiểm tra ssh-agent đã được chạy chưa:
eval "$(ssh-agent -s)"
Nếu đã được chạy thì nó sẽ ra:
# Agent pid xxxxxxxx ở đây là số bất kỳ, chứng tỏ nó đã được chạy rồi.
Thêm SSH key nãy chúng ta vừa tạo vào:
ssh-add ~/.ssh/id_rsaLưu ý: id_rsa chính là private key của bạn, nếu ở bước 2, bạn có key khác thì thay tên key tương ứng vào.
Bước 4: Thêm ssh public key vào tài khoản trên server của bạn (github, gitlab…)
Bạn có thể dùng lệnh sau để show nội dung file public ssh-key và tiến hành copy nó.
cat ~/.ssh/id_rsa.pubLưu ý: id_rsa.pub chính là public key của bạn, nếu ở bước 2, bạn có key khác thì thay tên key tương ứng vào.
Đối với github:
Bạn đăng nhập vào github và truy cập vào link sau: https://github.com/settings/keys và nhấn vào New SSH key

Phần Title để đạt tên cho bạn dễ nhớ thôi, nên đặt gì cũng được hoặc nếu không thì bạn có thể để trống cũng được.
Phần Key thì bạn paste nội dung vừa copy vào.
Ấn Add SSH key là xong rồi

Đối với gitlab:
Bạn đăng nhập vào gitlab rồi truy cập link sau: https://gitlab.com/-/profile/keys rồi thao tác tương tự đối với github

Bước 5. Kiểm tra kết nối
ssh -T [email protected]hoặc
ssh -T [email protected]Có thể bạn sẽ nhận được thông báo về việc thêm host gitlab vào danh sách tin cậy:
The authenticity of host gitlab.com (207.97.227.239) can't be established.
# RSA key fingerprint is 16:27:ac:a5:76:28:2d:36:63:1b:56:4d:eb:df:a6:48.
# Are you sure you want to continue connecting (yes/no)?Bạn chỉ việc gõ yes vào terminal rồi Enter là được. Và bạn sẽ nhận được dòng thông báo thành công:
Hi admin! You've successfully authenticated ...
hoặc
Welcome to GitLab, @admin!OK, đến đây là bạn đã có thể sử dụng link SSH rồi, giờ bạn có thể clone cả thế giới thông qua ssh rồi.