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
- 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 passphrase để giải mã Private Key
Chọn “Save Private Key” để lưu lại Private Key dùng cho Windows.
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.
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.
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.
Nhập passphrase và chọn “Save Private key“. Việc tạo bộ khóa hoàn tất.
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
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.
Điền IP Server và tiến hành 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.
Đào Xuân Hưng – AdminVietnam.org