Đăng nhập server dùng SSH Keys, không cần Password

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.

Leave a Reply