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 key và private 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
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:
- Dễ bị lộ, bị nhìn thấy
- Dễ bị tấn công bằng brute force
- Gây khó chịu khi phải nhớ mật khẩu dài hoặc nhập quá nhiều lần
- 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.
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
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
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.
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.
Với Gitlab cũng tương tự, truy cập https://gitlab.com/profile/keys:
Đố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 ý
- Public key và private key đúng như tên gọi của nó, bạn có thể share public key nhưng private key thì không.
- 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
- Chmod
400
cho tất cả các private key là an toàn nhất. - 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.
- 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.
Disable login mật khẩu mà để mất file private thì làm sao bạn ơi?
Câu hỏi rất hay, chắc mình phải sửa bài thôi =))
Thực sự nếu disable login mật khẩu mà mất private key thì có thể liên hệ supporter bên cung cấp server/vps can thiệp cứng để thay authorize key mới vào.