SSH keys là một cơ chế bảo mật cơ bản cho việc truy cập từ xa vào máy tính. Chúng cung cấp một phương thức thay thế an toàn và tiện lợi hơn so với xác thực mật khẩu truyền thống. Hướng dẫn này sẽ giới thiệu cho bạn các khái niệm cơ bản về SSH keys và cách sử dụng chúng.
SSH Keys là gì?
SSH keys là các cặp khóa mã hóa bao gồm một khóa công khai và một khóa riêng tư.
- Khóa Riêng Tư(Private Key): Khóa này được giữ bí mật và không bao giờ được chia sẻ. Nó được sử dụng để giải mã dữ liệu đã được mã hóa bằng khóa công khai tương ứng.
- Khóa Công Khai(Public Key): Khóa này được chia sẻ với máy chủ từ xa, được chia sẻ tự do với người khác. Nó được sử dụng để mã hóa dữ liệu.
Lợi Ích Khi Sử Dụng SSH Keys
- Tăng Cường Bảo Mật: SSH keys loại bỏ nguy cơ bị đánh cắp mật khẩu thông qua việc nghe lén hoặc tấn công thử mật khẩu như brute-force và các thử nghiệm phishing, vì chúng yêu cầu quyền truy cập vào khóa riêng tư.
- Tiện Lợi: Sau khi cấu hình, SSH keys cho phép xác thực không cần mật khẩu, giúp việc truy cập vào nhiều máy chủ trở nên dễ dàng hơn. Bạn không cần phải nhớ và gõ lại mật khẩu phức tạp.
- Khả Năng Mở Rộng: Chúng đặc biệt hữu ích trong môi trường có nhiều máy chủ, vì bạn có thể sử dụng cùng một cặp khóa trên nhiều hệ thống.
- Tự động hóa: SH keys có thể dễ dàng tích hợp vào các kịch bản và công cụ tự động hóa.
Cách Tạo Và Sử Dụng SSH Keys
Bước 1: Tạo Cặp SSH Key
Sử dụng lệnh ssh-keygen
trong terminal
hoặc command prompt
: để tạo cặp khóa
ssh-keygen -t ed25519 -C "your_email@example.com"
# Ví dụ:
ssh-keygen -t ed25519 -C "xinhnd@ducxinh.com"
-t ed25519
: Chỉ định loại khóa cần tạo, trong trường hợp này làEd25519
.Ed25519
là thuật toán chữ ký số hiện đại và an toàn đang ngày càng phổ biến do tốc độ và kích thước khóa nhỏ hơn so với RSA. Lưu ý: Ed25519 bảo mật hơn RSA nên được recommend sử dụng.-C
: Thêm một comment (comment có thể là bất kỳ văn bản nào bạn thấy hữu ích, Thường là email của bạn) để nhận dạng khóa.
Hệ thống sẽ yêu cầu bạn nhập một mật khẩu(passphrase). Điều này thêm một lớp bảo mật vào khóa riêng tư của bạn. Sau khi nhập passphrase, bạn sẽ thấy thông báo cho biết rằng khóa đã được tạo thành công. Bạn sẽ thấy một thông báo tương tự như sau:
# Linux
Your identification has been saved in /home/ec2-user/.ssh/id_ed25519
Your public key has been saved in /home/ec2-user/.ssh/id_ed25519.pub
# Windows
Your identification has been saved in /home/ec2-user/.ssh/id_ed25519
Your public key has been saved in /home/ec2-user/.ssh/id_ed25519.pub
Vị trí ssh key được lưu ở Linux:
~/.ssh/id_ed25519
là khóa riêng tư~/.ssh/id_ed25519.pub
là khóa công khai. Vị trí ssh key được lưu ở Window:C:\Users\YourUsername\.ssh\id_ed25519
là khóa riêng tưC:\Users\YourUsername\.ssh\id_ed25519.pub
là khóa công khai.
Để tùy chỉnh vị trí và tên tệp bạn dùng thêm option sau:
ssh-keygen -t ed25519 -C "your_email@example.com" -f ~/.ssh/id_ed25519
Ví dụ
ssh-keygen -t ed25519 -C "xinh-demo@gmail.com"
Trên Linux - Terminal
Trên Window - PowerShell
Nếu bạn dùng hệ thống cũ không hổ trợ Ed25519 algorithm thì có thể dụng lệnh sau:
ssh-keygen -t rsa -b 4096 -C "your_email@example.com"
-t rsa
: Chỉ định loại khóa (RSA trong trường hợp này).-b 4096
: Xác định độ dài của khóa để tăng cường bảo mật. Lưu khóa riêng tư an toàn (ví dụ:~/.ssh/id_rsa
) và ghi lại vị trí của khóa công khai (ví dụ:~/.ssh/id_rsa.pub
).
Bước 2: Thêm Khóa Công Khai Vào Máy Chủ Từ Xa
1. Tìm khóa công khai của bạn:
Tệp khóa công khai thường nằm ở ~/.ssh/id_ed25519
, ~/.ssh/id_rsa.pub
hoặc tên bạn đã tuỳ chỉnh tại đường dẫn ~/.ssh/
# Linux
cat ~/.ssh/id_ed25519.pub
# Windows - PowerShell
Get-Content $env:USERPROFILE\.ssh\id_ed25519.pub
## or the shorter alias
cat $env:USERPROFILE\.ssh\id_ed25519.pub
## copy the content directly to your clipboard
Get-Content $env:USERPROFILE\.ssh\id_ed25519.pub | Set-Clipboard
2. Kết nối đến máy chủ:
Sử dụng kết nối bảo mật (ví dụ, ssh user@server_address).
3. Thêm khóa công khai vào tệp authorized_keys
:
vi ~/.ssh/authorized_keys
echo "ssh-rsa YOUR_PUBLIC_KEY_HERE" >> ~/.ssh/authorized_keys
echo "ssh-rsa YOUR_PUBLIC_KEY_HERE" | sudo tee -a ~/.ssh/authorized_keys
Thêm khoá vào user cụ thể.
echo "ssh-rsa YOUR_PUBLIC_KEY_HERE" >> /home/ec2-user/.ssh/authorized_keys
echo "ssh-rsa YOUR_PUBLIC_KEY_HERE" | sudo tee -a /home/ec2-user/.ssh/authorized_keys
4. Kiểm tra kết nối:
Thử kết nối đến máy chủ bằng SSH.
# Linux
ssh -i ~/.ssh/id_ed25519 username@server-ip
ssh -i ~/.ssh/id_rsa username@server-ip
# Window
ssh -i C:\path\to\your\id_rsa username@server-ip
# Ví dụ:
ssh -i $env:USERPROFILE\.ssh\id_ed25519 ec2-user@57.180.41.130
Trong đó:
- ec2-user: là Server user
- 57.180.41.130: là địa chỉ IP của server
Nếu cấu hình đúng, bạn sẽ truy cập vào server thành công
Kết nối thành công trên Window - PowerShell:
Kết nối thành công trên Window - MacOS/Linux:
Mẹo Quản Lý SSH Keys
Sử Dụng Passphrase Để Tăng Cường Bảo Mật
Bảo vệ khóa riêng tư của bạn bằng một passphrase khi tạo. Điều này thêm một lớp bảo mật nữa trong trường hợp khóa của bạn bị xâm nhập.
Tổ Chức Các Khóa Cho Các Dự Án Khác Nhau
Lưu các khóa trong các thư mục riêng biệt và sử dụng ssh-config
để quản lý dễ dàng hơn. Ví dụ cấu hình trong ~/.ssh/config
:
Host project1
HostName example1.com
User your_user
IdentityFile ~/.ssh/project1_rsa
Host project2
HostName example2.com
User your_user
IdentityFile ~/.ssh/project2_rsa
Thường Xuyên Rotate( Xoay Vòng) SSH Keys
Thường xuyên xoay vòng khóa giúp giảm thiểu rủi ro truy cập trái phép nếu một khóa bị xâm nhập.
Các Vấn Đề Thường Gặp Với SSH Keys và Cách Khắc Phục
Lỗi Permission Denied (Public Key)
Đảm bảo rằng:
- Khóa công khai đã được thêm đúng vào máy chủ từ xa.
- Thư mục
~/.ssh
và các tệp của nó có quyền chính xác.
chmod 700 ~/.ssh
chmod 600 ~/.ssh/authorized_keys
Không Tìm Thấy Khóa Riêng Tư
Chỉ định tệp khóa riêng tư bằng cờ -i
:
ssh -i ~/.ssh/id_ed25519 user@remote_server
Không thể truy cập
- Kiểm tra security group của EC2 cho phép access vói port 22 và đảm bảo IP của bạn nằm trong whitelist IP.
Các Câu Hỏi Thường Gặp Về SSH Keys
-
Tôi có thể sử dụng cùng một SSH key cho nhiều máy chủ không? Có, nhưng nên sử dụng các khóa riêng biệt để tăng cường bảo mật.
-
Sẽ xảy ra gì nếu tôi mất khóa riêng tư? Bạn sẽ mất quyền truy cập vào các máy chủ liên quan. Luôn giữ bản sao lưu ở những vị trí an toàn.
-
SSH keys có tốt hơn mật khẩu không? Chắc chắn! SSH keys cung cấp xác thực mạnh mẽ hơn và loại bỏ nguy cơ bị đánh cắp mật khẩu. Hãy chuyển sang xác thực bằng SSH key và kiểm soát bảo mật của bạn
Tổng Kết
SSH keys là một yếu tố quan trọng trong việc quản lý hệ thống bảo mật và máy chủ từ xa. Bằng cách sử dụng SSH keys, bạn có thể tăng cường bảo mật, tối ưu hóa quy trình làm việc, cải thiện hiệu quả và đơn giản hóa việc quản lý quyền truy cập.