1. Cặp khóa SSH (SSH key pair):
- Khóa riêng tư (Private key): Được lưu trữ trên máy của người dùng (máy client), và phải được giữ bí mật.
- Khóa công khai (Public key): Được đặt trên máy chủ (server) mà người dùng muốn kết nối.
2. Tạo cặp SSH key:
ssh-keygen -t rsa -b 4096 -C "[email protected]"
# -t rsa: Chỉ ra thuật toán tạo khóa (RSA).
# -b 4096: Độ dài của khóa (khuyên dùng 4096 bit cho bảo mật).
# -C: Làm cho khóa có một comment, chẳng hạn như email, để nhận dạng dễ hơn
Sau khi tạo cặp khóa, hai tệp sẽ được sinh ra:
id_rsa
: Đây là khóa riêng tư và được lưu trên máy client (private).id_rsa.pub
: Đây là khóa công khai và sẽ được đặt trên máy chủ.
3. Cài đặt khóa công khai lên máy chủ:
Khóa công khai (từ tệp id_rsa.pub
) cần được sao chép vào máy chủ mà bạn muốn kết nối. Tệp này sẽ được lưu trong thư mục ~/.ssh/authorized_keys
của người dùng trên máy chủ.
# có thể dùng lệnh này để copy thay vì manual copy
ssh-copy-id username@server_ip
4. Cơ chế xác thực bằng SSH key:
Sau khi copy id_rsa.pub
vào ~/.ssh/authorized_keys
trên máy chủ, quá trình xác thực diễn ra như sau khi người dùng cố gắng kết nối:
- Khởi tạo kết nối: Người dùng từ máy client yêu cầu kết nối với máy chủ bằng SSH.
- Yêu cầu khóa công khai: Máy chủ yêu cầu client cung cấp khóa công khai để xác thực. Máy client sẽ gửi khóa công khai (được lấy từ tệp
id_rsa.pub
) cho máy chủ. - Kiểm tra mã hóa: Máy chủ kiểm tra xem khóa công khai đó có nằm trong tệp
authorized_keys
hay không. Nếu có, máy chủ sẽ tạo ra một một khóa phiên (session key) ngẫu nhiên và mã hóa nó bằng khóa công khai này. - Giải mã session key: Máy chủ gửi session key đã mã hóa này cho máy client. Máy client sẽ sử dụng khóa riêng tư (được giữ bí mật) để giải mã session key đó.
- Xác thực thành công: Máy client sau đó gửi lại session key đã giải mã cho máy chủ. Máy chủ kiểm tra session key. Nếu session key này khớp với bản gốc mà máy chủ đã tạo ra, việc xác thực thành công. Máy chủ xác nhận rằng máy client sở hữu khóa riêng tư đúng, và cho phép kết nối.
5. Tùy chọn quản lý nhiều SSH key:
Nếu bạn cần kết nối tới nhiều máy chủ với các khóa SSH khác nhau, bạn có thể quản lý các khóa này trong tệp ~/.ssh/config
. Ví dụ:
Host server1
HostName server1.example.com
User username
IdentityFile ~/.ssh/id_rsa_server1
Host server2
HostName server2.example.com
User username
IdentityFile ~/.ssh/id_rsa_server2
Note: Để tăng cường thêm 1 lớp bảo mật khi sử dụng ssh, người dùng có thể bảo vệ khóa riêng tư bằng passphrase. Nếu khóa riêng tư bị đánh cắp, hacker sẽ cần passphrase để sử dụng khóa này.