SSH key là việc xác thực với một máy chủ SSH bằng việc sử dụng cặp khóa public key và private key mà không cần mật khẩu. Bài viết này sẽ hướng dẫn bạn tạo và sử dụng SSH key bằng PuTTYgen và OpenSSH.
Ưu điểm của việc sử dụng SSH key là không cần phải nhập mật khẩu cho mỗi lần xác thực (tuy nhiên bạn phải nhập Passphrase nếu có). Sử dụng SSH key là bảo mật hơn so với mật khẩu, vì nó bắt buộc phải có khóa riêng tư để xác thực nên khó khăn hơn để đoán hoặc đánh cắp.
Mục lục nội dung
I. Tạo SSH Key
b. Chọn nơi lưu trữ và Passphrase
a. Tải PuTTYgen
b. Tạo khóa
Tạo SSH Key
Tạo SSH Key bằng OpenSSH
Tạo RSA Key Pair
ssh-keygen
Mặc định thì hệ thống sẽ tạo SSH key loại RSA với số bit mã hóa là 2048. Bạn có thể gán thêm một số tùy chọn như sau:
-t
: khai báo loại key mà bạn muốn tạo, có thể là rsa, dsa, ecdsa và ed25519.-b
: đây là số bit mã hóa của khóa- RSA: tối thiểu là 1024 và tối đa là 16384 bits.
- DSA: 1024 bits.
- ECDSA: 256, 384 hoặc 521 bits.
- Ed25519: 256 bits.
-C
: comment cho khóa, về mục đích sử dụng của khóa, hoặc một nội dung gì đó.
Ví dụ tạo SSH key loại RSA
ssh-keygen -t rsa
Chọn nơi lưu trữ và Passphrase
Nhấp phím Enter để lưu file. Mặc định thì SSH key sẽ được lưu trong thư mục .ssh
của user (/home/user/.ssh/
) hoặc root (/root/.ssh/
). Chúng bao gồm khóa riêng tư id_rsa và khóa công khai id_rsa.pub
Enter file in which to save the key (/root/.ssh/id_rsa):
Nhập mật khẩu cho Private key (Passphrase)
Enter passphrase (empty for no passphrase):
Toàn bộ quá trình tạo khóa sẽ trông như sau:
ssh-keygen
Generating public/private rsa key pair.
Enter file in which to save the key (/root/.ssh/id_rsa):
Created directory '/root/.ssh'.
Enter passphrase (empty for no passphrase):
Enter same passphrase again:
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:
c5:37:0a:ee:0a:68:2d:75:da:3f:12:12:27:a2:4b:15 root@localhost.localdomain
The key's randomart image is:
+--[ RSA 2048]----+
| |
| E . |
| . . o o |
| ..o .. o o . |
| ....+. S . |
|.. +.+.. |
|..+ +.... |
|.. . ..o. |
| .... |
+-----------------+
Tạo SSH Key bằng PuTTYgen
Nếu bạn đang sử dụng PuTTY để kết nối SSH thì bạn nên tạo SSH key bằng PuTTYgen cho hợp nhất
Tải PuTTYgen
Tải PuTTYgen và chạy chương trình.
Tạo khóa
Nhấn vào nút Generate để tạo mới một cặp khóa công khai và khóa riêng tư, di chuyển con trỏ chuột vào khoảng trống của thanh tiến trình để tạo khóa (di chuyển cho đến khi thanh tiến trình đạt 100%)
Bạn có thể thay đổi Key comment để dễ phân biệt và dễ nhớ nếu như bạn có nhiều key.
Nhập mật khẩu cho Key passphrase và Confirm passphrase, nó chính là mật khẩu của khóa riêng tư.
Nhấn Save public key để lưu khóa công khai của bạn, hoặc bạn có thể copy nội dung khóa công khai mà không cần lưu file này. Nhấn Save private key để lưu khóa riêng tư.
Đưa khóa công khai vào máy chủ
Sau khi tạo khóa bằng OpenSSH hoặc PuTTYgen. Để sử dụng SSH key thì bạn cần phải thêm khóa công khai (public key) có tên là authorized_keys vào máy chủ và dùng khóa riêng tư (private key) để xác thực việc kết nối từ máy trạm.
Các bước thực hiện như sau:
Tạo thư mục .ssh tại home của tài khoản user hay root của tài khoản root
mkdir ~/.ssh
Tạo file authorized_keys
trong thư mục .ssh
vừa tạo ở trên, có thể sử dụng vi, vim, nano... tùy thích:
nano ~/.ssh/authorized_keys
Sao chép nội dung của khóa công khai (public key) vào và lưu lại
Thiết lập quyền cho thư mục và file ở trên
chmod 700 ~/.ssh
chmod 600 ~/.ssh/authorized_keys
Ok, vậy là xong thiết lập cho máy chủ, bây giờ bạn cần dùng một chương trình kết nối SSH như ZOC Terminal, PuTTY... để tiến hành login và sử dụng thôi
Chú ý: nếu sử dụng PuTTY thì Khóa riêng tư (Private key) do OpenSSH tạo ra cần phải chuyển về định dạng của PuTTY (.ppk
) trước bằng công cụ PuTTYgen
Tắt chức năng xác thực bằng mật khẩu
Một khi bạn đã đăng nhập bằng private key thành công thì bạn có thể tắt chức năng đăng nhập bằng mật khẩu để hạn chế tối đa các nguy cơ bảo mật từ việc sử dụng mật khẩu.
Mở file /etc/ssh/sshd_config
sudo nano /etc/ssh/sshd_config
Tìm và chỉnh sửa dòng sau, xóa dấu #
nếu có:
PasswordAuthentication no
Khởi động lại SSH
sudo service sshd restart