SSH Keys là một phương thức xác thực đăng nhập với máy chủ qua SSH bằng việc đối chiếu giữa một cặp keys, bao gồm một khóa riêng tư (private key) và khóa công khai (public key) tương ứng. SSH Keys sử dụng giao thức xác thực challenge-response mà trong đó một bên trình bày một câu hỏi – challenge và một bên khác phải cung cấp một câu trả lời hợp lệ – response để được chứng thực.
Thông thường, bạn đăng nhập VPS thông qua username root và password tự động sinh ra do nhà phát hành cung cấp. Bạn có thể mất quyền truy cập VPS nếu để lộ mật khẩu hay bị dò tìm mật khẩu qua Brute Force Attack. Do đó, việc sử dụng SSH Keys sẽ bảo mật hơn rất nhiều so với phương pháp đăng nhập dùng mật khẩu truyền thống.
Có thể hiểu, Private Key là chìa khóa còn Public Key là ổ khóa.
- Private Key là một file text chứa dữ liệu được mã hóa, sử dụng thay cho password, thường được lưu trữ cẩn thận trên máy tính bạn. Thông thường, private key có độ dài ít nhất 2048bit và có thể được mã hóa bằng cụm mật khẩu nhằm tránh trường hợp bị sử dụng ngoài ý muốn. Định dạng file tùy thuộc phần mềm tạo keys, có thể OpenSSH Key, PuTTy Private Key Files .ppk hoặc Bitvise Keypair Files .bkp …
- Public Key cũng là một file text chứa dữ liệu được mã hóa, có thể được cài đặt ở bất kỳ một server nào. Khi bạn gửi yêu cầu đăng nhập kèm private key, server sẽ kiểm tra sự trùng khớp với public key trên server nhằm xác thực yêu cầu truy cập. Định dạng file .pub
Nội dung bài viết
1. Tạo SSH Keys
1.1. Đối với Linux (và macOS)
Bạn có thể tạo cặp Keys qua terminal trên VPS Linux bất kỳ với ssh-keygen
. Trong quá trình cài đặt, chương trình sẽ hỏi bạn nơi lưu keys và mật khẩu sử dụng private key (nếu có).
# ssh-keygen -t rsa -b 2048 Generating public/private rsa key pair. Enter file in which to save the key (/root/.ssh/id_rsa): #nơi lưu key Created directory '/root/.ssh'. Enter passphrase (empty for no passphrase): #mật khẩu cho private key Enter same passphrase again: #xác nhận lại mật khẩu cho private key Your identification has been saved in /root/.ssh/id_rsa. Your public key has been saved in /root/.ssh/id_rsa.pub. The key fingerprint is: 44:3e:dc:59:30:ed:f2:25:f8:71:42:e4:9c:d2:24:9a root@hocvps The key's randomart image is: +--[ RSA 2048]----+ | . +++ | | + + Xo. | | E ++= | | . .o.= o | | S + * | | o | | | | | | | +-----------------+
Keys được tạo theo thuật toán mã hóa RSA, độ dài 2048bit và lưu tại /root/.ssh/
. Trong đó, Private Key là id_rsa còn Public Key là id_rsa.pub, đều là OpenSSH Keys
Bạn cũng có thể chạy được lệnh ssh-keygen
trên macOS.
Lưu ý: khi được hỏi passphrase, nên nhấn phím Enter để trống, tránh phải nhập thêm mật khẩu một lần nữa khi sử dụng key. Và bạn nên sử dụng SSH Keys tạo bởi phương pháp này.
1.2. Đối với Windows
Hiện tại, hầu hết các các phần mềm SSH đều có công cụ tạo Keys. Để đảm bảo bảo mật, bạn cần tạo cặp Keys mã hóa bởi thuật toán RSA2 với độ dài ít nhất 2048bit.
Quá trình tạo bạn cũng có thể nhập mật khẩu sử dụng Passphrase cũng như note về mục đích sử dụng Key Comment.
- PuTTy với ứng dụng PuTTygen. Ngoài ra, bạn có thể dùng (PuTTygen Portable).
- ZOC với menu File/Create SSh Key Files.
- Bitvise SSH với Client key manager/Generate New.
Tạo SSH Keys bằng PuTTyGen: lựa chọn SSH-2 RSA và 2048 như hình rồi ấn Generate đồng thời rê chuột xung quanh khung trắng để khởi tạo các chuỗi ngẫu nhiên. Nếu bạn đã có Private Key thì chỉ cần nhấn Load để tạo Public Key tương ứng(dùng khi convert Private Key dạng OpenSSH sang).
Sau khi tạo xong, màn hình hiển thị Public Key. Bạn có thể thiết lập Passphrase và Key Comment. Bạn nhấn Save private key để lưu lại.
Tạo SSH Keys bằng Bitvise SSH Client:
2. Thêm Public Key vào VPS
Đối với server Linux, bạn cần lưu thông tin Public Key tại ~/.ssh/authorized_keys
để xác thực đăng nhập sử dụng SSH Keys.
# mkdir ~/.ssh/ # nano ~/.ssh/authorized_keys
Copy toàn bộ nội dung Public key (dạng ssh-rsa AAAA...
) chèn thêm phía cuối file. Nhấn Ctrl+O để lưu lại nội dung và Ctrl+X để thoát khỏi editor.
Bật chế độ đăng nhập bằng SSH Keys: kích hoạt (uncomment) các tham số sau trong SSH Config tại /etc/ssh/sshd_config
- PubkeyAuthentication yes
- AuthorizedKeysFile .ssh/authorized_keys
Sau đó, khởi động lại SSH Service
# service sshd restart
3. Sử dụng SSH Keys
Để sử dụng SSH Keys truy cập VPS, các bạn chỉ cần login thông qua các phần mềm SSH như PuTTy, Bitvise, ZOC và lựa chọn file Private Key đã tạo khi trước.
Lưu ý: Thường xuyên đăng nhập bằng SSH Client nào thì dùng chính phần mềm ý tạo SSH Keys.
_ Đối với PuTTy
Nếu sử dụng OpenSSH Keys (keys tạo bởi lệnh trong Linux/MacOS,…), bạn cần dùng PuTTygen để convert Private Key sang chuẩn đăng nhập với PuTTy.
Nếu passphrase được thiết lập, phần mềm sẽ yêu cầu bạn nhập trong quá trình đăng nhập. Nếu không, bạn sẽ được truy cập thẳng vào server.
4. Cấu hình sử dụng SSH Keys
Để gia tăng bảo mật, bạn nên thay đổi port truy cập SSH mặc định (22) và theo dõi truy cập SSH với Fail2ban.
Bên cạnh đó, cũng nên vô hiệu hóa đăng nhập sử dụng mật khẩu bằng cách chỉnh sửa tham số sau trong /etc/ssh/sshd_config
:
PasswordAuthentication no
Sau đó, khởi động lại SSH Service
# service sshd restart
Qua bài viết này, hi vọng các bạn đã hiểu được SSH Keys là gì, cách thức sử dụng cũng như tầm quan trọng của nó. Các bạn cũng nên bỏ hẳn cách thức đăng nhập bằng mật khẩu truyền thống, tránh bị lộ/dò mật khẩu.
Chúc bạn sử dụng VPS hiệu quả và an toàn.
Cho mình hỏi là trên Vultr có sẵn mục SSH key rồi, thì mình có cần chỉnh sửa các bước trên vps không ạ?
Cụ thể trên từng nhà cung cấp thì bạn cần thử rồi
Làm đúng hướng dẫn trên kết quả giờ login bằng key nó k cho login lun 🙁 , hên là dùng thằng vps azure để test k là cài lại vps trên site chính là vỡ mồm
Có hướng dẫn từng bước mà bạn. Bạn login thành công bằng SSH Keys thì mới nên chặn login bằng mật khẩu
Chắc mình vội quá nên chặn lun login bằng mật khẩu 🙁
sao của mình đã khóa đăng nhập bằng password r mà vẫn báo như hình ta?
https://imgur.com/2vSDhob
tự dưng hom nay hôm nay mình ko đăng nhập vào sever bằng ssh đc thì bạn phán đoán lỗi hộ mình đc ko
Em cài đặt ok rồi. mà bị mất cái file add vào putty. giờ không vào được. có cách nào tắt và trở về tình trạng ban đầu được không ạ
Bạn mất Private Key? Nếu VPS đã tắt đăng nhập bằng password thì bạn truy cập qua web console của nhà cung cấp nhé.
Chỉ còn phương pháp đó thôi
đăng nhạp ok rồi a. nhưng làm sao lấy lại key để bạt chế độ không cần password ban đầu a
Nếu bạn vẫn đăng nhập được thì vào server sửa lại các thiết lập về ban đầu để server có thể đăng nhập được qua Password
Ví dụ như trong bài viết bạn đã sửa phần nào thì sửa ngược lại
Mình muốn nhờ bạn sửa VPS có trả phí bạn cho mình xin sdt để liên lạc cho nhanh được không
Còn phải chọn cái PAM cũng là no thì mới tắt được hoàn toàn vụ đăng nhập bằng password, mãi mình mới tìm ra
Ad cho em hỏi chút: em đã thay đổi “PubkeyAuthentication yes” và “PasswordAuthentication no” rồi nhưng lại nghịch dại là không thêm key vào vps, giờ không dùng pass để đăng nhập được mà cũng ko có key để đăng nhập luôn, ad chỉ em cách vào file sshd_config để thay đổi PasswordAuthentication thành yes với ạ
Bạn đã khóa đăng nhập bằng Password nhưng lại không thêm SSH Keys thì chỉ còn cách đăng nhập qua console của nhà cung cấp để chỉnh sửa sshd_config thôi
Đăng nhập console của nhà cung cấp cụ thể là nư thế nào vậy bạn.
Mình gặp trường hợp y vậy.
Mỗi nhà cung cấp sẽ có 1 công cụ để bạn đăng nhập SSH vào VPs trên nền website. Bạn kiểm tra trong trang quản lý VPS nhé
Admin cho em hoỉ chút là em tạo SSH Key và sử dụng nso đăng nhập ok rồi. Nhưng ở cái bước vô hiệu hóa chức năng đăng nhập thì em mở file /etc/ssh/sshd_config để thêm No vào như hướng dẫn nhưng file mở lên không có gì ạ? Giờ em phải làm gì ạ?
https://uphinhnhanh.com/image/3W0lQW
Bạn mở sai file rồi. Như ảnh bạn đang mở file /root/etc/ssh/sshd_config, không tồn tại nên không có nội dung
các bác cho em hỏi chút ạ
Em vừa làm theo hướng dẫn và đăng nhập ssh qua key rồi.
Em cũng đã tắt đăng nhập pass cho vps xong
bây giờ em muốn truy cập SFTP dùng bởi key ssh thì có được ko ạ
Mong các bác chỉ giúp
Được bạn nhé, vì vẫn dùng cổng SSH thôi
Hi anh.
Có người đưa cho e 2 file là .pem vs .ppk
Giờ e chẳng biết login bằng cách nào luôn. Mong được a chỉ giáo.
Thanks a
Bạn dùng file ppk nhé. Trong bài viết mình có ghi đó
Cám ơn anh. Để e thử xem
Tài khoản root vẫn luôn đăng nhập được bằng password mặc dù đã cấu hình PasswordAuthentication no. Như vậy có nghĩa chưa cấu hình thành công phải không?
Uhm bạn. Bạn đã restart service chưa?
Ah ok rồi bạn, Hôm trước mình chạy /etc/ssh/sshd_config, bỏ comment và đổi no cho PasswordAuthentication no, restart ssh service: service sshd restart mà vẫn đăng nhập được. Hôm nay vào kiểm tra lại dòng PasswordAuthentication vẫn là yes. Cứ như đùa ý ko hiểu nổi.
Có thể VPS bạn cấm ghi vào file ý. Bạn xem có phần thông tin của Network Manager không
Một số nhà cung cấp có thể cấm sửa đổi thông tin file và yêu cầu bạn sửa đổi thông qua menu trang quản lý
Mình sửa được rồi mà, cảm ơn bạn đã trả lời 🙂
Tức hôm nay bạn lại sửa yes thành no thì được?
uhm đúng rồi đó bạn. hôm trước cũng làm tương tự, kiểm tra đi kiểm tra lại xem làm đúng theo hướng dẫn hay nhưng cứ đăng nhập dùng password vẫn vào được. Cách một hôm vào xem lại file lại thấy trường pass là yes sửa lại thành no chạy lại sshd rồi thoát ra thử đăng nhập với pass không được. Dùng key ok luôn. Đúng là ảo 😀
Đính chính
*Cài directadmin null
mình có thể gặp nguy hiểm đối với tài khoản mail, credit card,…?
Cảm ơn !
Là sao cơ bạn?
Chào bạn, cho mình hỏi, ssh key này có thể tiết lộ những thông tin gì của mình. Mình tạo vps trên google cloud, có người cài directadmin cho mình mà không được, người ta bảo gửi key ssh cho họ cài trên máy họ thử. Nếu mình share key này đi thì họ có thể biết được những thông tin gì của mình ?
Thì họ sẽ đăng nhập được vào VPS bạn, thế thôi
Chao ban .
Minh xin hoi muc 2 : Them Public Key vao VPS . minh chi thay ban huong dan su dung cho Linux . Ma minh dang xai Windows 10 thi phai lam nhu the nao ban oi ?? Hi vong ban co the huong dan minh them . Minh do ve IT lam .
Cam on .
VPS chạy Windows OS không đăng nhập bằng SSH Keys bạn nhé.
Nếu bạn nào cần chuyển đổi định dạng format private tạo ra từ Putty-gen thành format private key key OpenSSH đem sử dụng lên Linux để kết nối đến các máy chủ Linux khác. Các bạn có thể tham khảo bài viết này : https://cuongquach.com/ssh-chuyen-doi-private-key-giua-openssh-va-putty.html