Tuy SSH là giao thức mã hóa an toàn, tuy nhiên ta vẫn phải sử dụng mật khẩu để truy cập. Và nếu trong quá trình sử dụng mà các gói tin của bạn bị bắt lại, các phiên trao đổi khóa giữa SSH server và client sẽ bị lộ và attacker có thể dùng nó để giải mã dữ liệu. Hơn nữa, việc này cũng tạo điều kiện cho các cuộc tấn công Brute Force mật khẩu.

May thay, SSH hỗ trợ sử dụng cặp khóa Private Key và Public Key được chia sẻ với nhau từ trước. Nghĩa là bạn đã có sẵn Private Key để trao đổi với server mà không cần đến quá trình trao đổi khóa, điều này sẽ hạn chế khả năng bị bắt gói. Hơn nữa cặp khóa này còn có một mật khẩu riêng của nó, gọi là passphrase (hay keyphrase). Mật khẩu này được dùng để mở khóa Private Key (được hỏi khi bạn SSH vào server) và tạo lớp xác thực thứ 2 cho bộ khóa. Nghĩa là:
+ Nếu attacker không có Private Key, việc truy cập vào server gần như không thể, chỉ cần bạn giữ kĩ Private Key.
+ Tuy nhiên trong trường hợp Private Key bị lộ, bạn vẫn khá an toàn vì đối phương không có passphrase thì vẫn chưa thể làm được gì, tuy nhiên đó chỉ là tạm thời. Bạn cần truy cập server thông qua cách trực tiếp hoặc qua VNC của nhà cung cấp nếu đó là một VPS để thay đổi lại bộ khóa.

Cách thức tạo bộ khóa RSA

  1. Server tự tạo
root@Server:~$ ssh-keygen -t rsa

Bỏ qua phần vị trí lưu key, bạn nhập passphrase 2 lần và bộ khóa sẽ được sinh ra tại thư mục ~/.ssh với tên id_rsa (Private Key) và id_rsa.pub (Public Key).

root@Server:~$ mv ~/.ssh/id_rsa.pub ~/.ssh/authorized_keys  // public key sẽ được lưu tại server.
root@Server:~$ chmod 600 ~/.ssh/authorized_keys
root@Server:~$ chmod 700 ~/.ssh

Sau đó, copy ~/.ssh/id_rsa về máy tính.

Nếu bạn sử dụng một máy Linux để SSH đến Server, lưu id_rsa tại thư mục ~/.ssh/ . Bạn bắt buộc phải chmod 600 thì khóa này mới sử dụng được (vì nó là private, không thể để user khác đọc được do quyền 644 định sẵn).

Nếu bạn sử dụng máy tính Windows để SSH đến Server, điển hình như PuTTY, trước hết bạn tải PuTTYGen về máy để generate Private Key phù hợp với PuTTY.

Load file id_rsa vào PuTTYGen.

Nhập Private Key
Nhập Private Key

Nhập passphrase để giải mã Private Key

Nhập Passphrase
Nhập Passphrase

Chọn “Save Private Key” để lưu lại Private Key dùng cho Windows.

Lưu Private Key
Lưu Private Key

Private Key của bạn đã có thể sử dụng.

(*) Lưu ý: Nếu không dùng PuTTYGen để convert Private Key, bạn sẽ gặp phải lỗi “Unable to use key file …..” trong PuTTY. Các phần mềm khác mình không rõ tuy nhiên khi bạn add key này vào Bitvise SSH Client thì phần mềm này sẽ tự động convert cho bạn.

2. Tạo bằng PuTTYGen

Để tạo bộ khóa mới, bạn chọn Generate.

Tạo khóa RSA
Tạo khóa RSA

Di chuột liên tục tại vùng trống trên phần mềm để tạo khóa ngẫu nhiên.

Di chuyển chuột liên tục
Di chuyển chuột liên tục

Copy toàn bộ nội dung trong ô “Public key for pasting into OpenSSH authorized_keys file:” và lưu lại dưới tên authorized_keys rồi gửi lên Server. Đây là Public Key dành riêng cho OpenSSH. Nút “Save public key” sẽ cho một Public Key dạng khác, bạn không cần quan tâm đến nút này.

Public key cho Openssh
Public key cho Openssh

Nhập passphrase và chọn “Save Private key“. Việc tạo bộ khóa hoàn tất.

Lưu Private Key
Lưu Private Key

Cấu hình OpenSSH Server

root@Server:~$ vi /etc/ssh/sshd_config
PermitRootLogin yes  // cho phép root login
PasswordAuthentication no    // Không cho phép truy cập SSH bằng password, nếu không cấm, việc tạo bộ khóa sẽ chẳng còn ý nghĩa
Cấu hình SSH
Cấu hình SSH

Khởi động lại SSH service

root@Server:~# initctl restart ssh   // Ubuntu/Debian
[root@Server ~]# systemctl restart sshd   // CentOS/Redhat/Fedora

Kiểm thử với Linux

ssh <username>@<IP hoặc hostname server>
Ex: ssh [email protected]

Kiểm thử với PuTTY

Bật PuTTY lên, browse đến Connection -> SSH -> Auth và load file Private Key.

Load Private Key
Load Private Key

Điền IP Server và tiến hành mở kết nối.

Mở kết nối
Mở kết nối

Đến đây thì bộ key của chúng ta đã hoạt động tốt, điền passphrase và bạn sẽ vào được Terminal.

Điền Passphrase
Điền Passphrase

Đào Xuân Hưng – AdminVietnam.org