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

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 RSA2048 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 PassphraseKey Comment. Bạn nhấn Save private key để lưu lại.


Tạo SSH Keys bằng ZOC Client:


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.

_ Đối với ZOC


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.

Comment của bạn

Lưu ý: tất cả comment đều được kiểm duyệt cẩn thận! Nếu có code bạn hãy up lên pastebin.com rồi để lại link trong comment.

38 Comments

  1. minh 28 comment

    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 ạ?

  2. Binh Nguyen 87 comment

    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

    1. Việt Phương Moderator

      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

  3. Đạt Tiến Bùi 1 comment

    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

  4. huynh quoc huy 6 comment

    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 ạ

    1. Việt Phương Moderator

      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

      1. huy 6 comment

        đă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

        1. Việt Phương Moderator

          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

          1. vannguyen 29 comment

            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

  5. Long 7 comment

    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

  6. Lê Cương 1 comment

    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 ạ

    1. Việt Phương Moderator

      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

      1. TTSHOP 1 comment

        Đă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.

        1. Việt Phương Moderator

          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é

  7. Tiến Ban 4 comment

    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

    1. Việt Phương Moderator

      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

  8. TungNguyen 26 comment

    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

  9. Tam 10 comment

    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

  10. mrduc 14 comment

    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?

      1. mrduc 14 comment

        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.

        1. Việt Phương Moderator

          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ý

          1. mrduc 14 comment

            Mình sửa được rồi mà, cảm ơn bạn đã trả lời 🙂

          2. Việt Phương Moderator

            Tức hôm nay bạn lại sửa yes thành no thì được?

          3. mrduc 14 comment

            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 😀

  11. Duong 2 comment

    Đí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 !

  12. Duong 2 comment

    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 ?

  13. Tay 1 comment

    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 .