SSH key là gì và dùng để làm gì?

Là một cặp key được dùng để mã hóa bất đối xứng, gồm có public keyprivate key. SSH key dùng để xác minh quyền truy cập và mã hóa nội dung để tránh tấn công MITM. Trong nội dung bài viết này chỉ nói đến 2 công dụng của SSH key:

  • Xác minh quyền SSH vào server
  • Xác minh quyền truy cập git repo
Dùng SSH key như thế nào? 2

Quy trình xác minh RSA key

Nếu bạn thắc mắc tại sao lại dùng SSH key mà không dùng mật khẩu? Đơn giản vì mật khẩu không bảo mật và không tiện dụng bằng SSH key.

Nhược điểm của mật khẩu:

  1. Dễ bị lộ, bị nhìn thấy
  2. Dễ bị tấn công bằng brute force
  3. Gây khó chịu khi phải nhớ mật khẩu dài hoặc nhập quá nhiều lần
  4. Quên mật khẩu là thôi xong  🙄

Cách tạo ra SSH key

# Thay [email protected] bằng email của bạn
$ ssh-keygen -t rsa -b 4096 -C "[email protected]"

Sau khi gõ lệnh trên thì bạn có thể follow instruction của nó. Chỉ có 2 điều cần chú ý:

1. Tên của cặp key

Nếu account của bạn chưa có cặp key nào, khi tạo mới bạn có thể để tên defaut là id_rsa và id_rsa.pub. Nếu bạn đã có một cặp key rồi thì hãy đổi tên đi, vì nó sẽ ghi đè cặp key có sẵn của bạn.

Dùng SSH key như thế nào? 3

Điền tên hoặc đường dẫn khác nếu không muốn bị ghi đè lên ssh key có sẵn

2. Passphrase

Bạn có muốn dùng SSH key mà vẫn phải nhớ mật khẩu không? Trong trường hợp bạn nhập passphrase, thì dù người khác có copy được cặp key của bạn cũng không thể dùng được vì phải biết mật khẩu nữa. Riêng tôi thì không cần phải bảo mật đến vậy cho nên để passphrase là empty luôn  :mrgreen:

Dùng SSH key như thế nào? 4

Màn hình terminal sau khi generate ssh key

Nội dung của private key sẽ tương tự như thế này:

-----BEGIN RSA PRIVATE KEY-----
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
-----END RSA PRIVATE KEY-----

Còn đây là nội dung của public key:

ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAACAQCptXxrb8+JQw5r4l/CRs+lkbXLGM6xMuGcnsU32mJToy06C+OezTitjdk9u8yNZ6XkgR8IG6BLM5b6zXYSfGyX7EYkMhOGoJyReOXDWL96jDcCmO2l6+cUJIr2qEVW/RekxENOimgngvGnDwKEbawVSoU/Z09O8wrrRT2LdEdxyDAx1mb9IZw+IsvvSTDQzNw9OBqLuAmPMrUB2ANtqwTPUgDS4EqPr3I9GpLaSUXczURhScjP1i7kYQpukP+5BB07/koEOdXOXYFTjXlQYNqQ3yig3DiWYwWT/7JWywZrqhHgAeSDUO/hRChDdhK5XM9RNTpP87ayMohPDxFioMLR3Ai+5L+2ChsAFaAC0w8WYgaJGjDc9RjHnHm4hyzCEXn77DkEXHsuVWIjzUPJI1J2iVCWGhFNV2+9CnmtFBfeVFlpopcdlyfvw0Qj+WiCNM4snYKmgJcCULXhaN+kS6bff7kyv949KqEQiReoGEyEpzs5Lnoohkncsa4BuoCmZC8T1HbCUrqhXC9rjuXyV34gZrvHcVLgpNDA4R4108aZzfZCUtBIejhc3CsSXB1LzW6YP/YcdFEyH3Kv2gwHax1t8hxcdR7qW2g5kJFsSFVXROtoVTBfoYakqKNMae9t/bmi7S36itY7T0DwU7NI4gVokC/bG7o6beF7lUNwNWcjCw== [email protected]

 

Dùng SSH key để đăng nhập vào server

Thêm public key vào authorized_key trên server

Nếu trên server chưa có file authorized_keys thì phải tạo nó đã:

$ mkdir ~/.ssh
$ chmod 700 ~/.ssh
$ touch ~/.ssh/authorized_keys
$ chmod 600 ~/.ssh/authorized_keys

Sau đó bạn mở file ~/.ssh/authorized_keys bằng editor gì tùy thích, vim hay nano gì đó cũng được.  Copy toàn bộ nội dung của file public key vào, nếu muốn thêm nhiều public key thì mỗi key một dòng.

SSH dùng private key

// Nếu server dùng port default là 22 thì không cần set tham số p
$ ssh [username]@[ip] -i [path-to-private-key] -p [port-number]

Ví dụ bạn muốn đăng nhập bằng tài khoản root tới server có ip là 192.168.10.10, cổng 10022, đường dẫn tới private key là ~/.ssh/id_rsa_test:

$ ssh -i ~/.ssh/id_rsa_test [email protected] -p 10022

Nếu bạn gặp lỗi này:

Permissions 0XXX for 'YYY' are too open.
It is recommended that your private key files are NOT accessible by others.
This private key will be ignored.

Thì hãy chmod lại file private key thành 400(tức là quyền chỉ đọc cho người sở hữu). Thực ra set quyền thành 600 vẫn được, nhưng tôi không nghĩ chúng ta cần phải sửa nội dung của file này. Cho nên quyền 400 là đủ rồi.

$ chmod 400 ~/.ssh/id_rsa_test

Lệnh trên dùng cho cả file PEM luôn nhé.

// example
$ ssh -i aws.pem [email protected]

 

Dùng SSH key để push lên git repo

Tương tự SSH tới server, bạn cũng phải cung cấp public key cho git repo để chúng có thể xác minh quyền truy cập.

Với Github, truy cập https://github.com/settings/ssh/new và paste nội dung của public key vào ô Key, sau đó nhấn Add SSH Key.

Dùng SSH key như thế nào? 5

Màn hình add new key của github

Quan trọng là khi clone bạn phải dùng link ssh, nếu dùng link https thì Github vẫn hỏi username/password như bình thường.

Dùng SSH key như thế nào? 6

Clone dùng link SSH

Với Gitlab cũng tương tự, truy cập https://gitlab.com/profile/keys:

Dùng SSH key như thế nào? 7

Màn hình add new key của gitlab

Dùng SSH key như thế nào? 8

Clone dùng link ssh

Đối với những dự án có sẵn, mà link repo hiện tại là https thì bạn chỉ cần đổi link là được:

$ git remote set-url [repo-name] [ssh-url]

//example
$ git remote set-url origin [email protected]:jaredchu/JC-Firebase-PHP.git

Nhớ cd vào thư mục project trước nhé.

Lưu trữ vào dùng lại

Chúng ta nên lưu trữ ssh key ở đâu đó để khi chuyển máy hoặc cài lại OS thì dùng lại, đỡ phải setup lại các bước trên. Bản thân tôi lưu trữ trên Drive với bảo mật 2 lớp, chắc cũng khá là an toàn rồi.

Vấn đề là khi tải ssh key từ trên Drive về không phải dùng được ngay. Bạn phải add lại:

Bước 1: copy ssh key vào thư mục ~/.ssh.

Bước 2: Dùng lệnh ssh-add để thêm ssh key vào system.

$ ssh-add [path-to-private-key]

// example
$ ssh-add ~/.ssh/id_rsa

Nếu nó hỏi passphrase thì nhập passphrase và chọn automatic unlock để lần sau không phải nhập nữa nhé.

Lưu ý

  1. Public keyprivate key đúng như tên gọi của nó, bạn có thể share public key nhưng private key thì không.
  2. Có thể không lưu trữ public key vì bạn có thể generate public key từ chính private key.
    ssh-keygen -y -f ~/.ssh/id_rsa > ~/.ssh/id_rsa.pub
  3. Chmod 400 cho tất cả các private key là an toàn nhất.
  4. Sau khi config ssh bằng key, đổi mật khẩu user trên server thật dài hoặc disable luôn chức năng đăng nhập bằng mật khẩu để chống brute force.
  5. Nên test login và backup private key trước khi disable chức năng đăng nhập bằng mật khẩu để phòng trường hợp làm mất private key.
0 0 vote
Article Rating