Giới thiệu về SSH: cấu hình truy cập từ xa, sử dụng khóa
1. SSH là gì?
Hãy tưởng tượng bạn đang ở một đầu của hành tinh, còn server cần cấu hình thì ở đầu kia. Công việc của một chuyên gia IT trong trường học chạy vòng quanh các phòng học không phải thứ chúng ta muốn. May mắn thay, có SSH (Secure SHell) - công cụ để quản lý server từ xa.
SSH là một giao thức mạng cho phép kết nối an toàn với các máy tính từ xa. Kết nối được thực hiện bằng cách sử dụng mã hóa, điều này có nghĩa là dữ liệu được truyền được bảo vệ khỏi con mắt tò mò. SSH thay thế các phương pháp cũ như Telnet, vốn truyền dữ liệu ở dạng không mã hóa (giống như một bưu thiếp của Bưu điện Nga).
Ưu điểm của SSH
- Bảo mật. SSH sử dụng mã hóa, bảo vệ dữ liệu khỏi bị đánh cắp.
- Linh hoạt. Quản lý server từ xa, truyền tệp, tạo kênh - tất cả đều có thể qua SSH.
- Đa nền tảng. Hoạt động cả trên Linux, Windows (bao gồm cả WSL), và MacOS.
Bây giờ khi bạn đã hiểu tại sao cần SSH, hãy chuyển sang thực hành.
2. Cài đặt SSH-client
Bắt đầu với client, thứ sẽ cho phép bạn kết nối đến server. Nếu bạn đang sử dụng một phân phối Linux hiện đại, SSH-client có thể đã được cài đặt sẵn. Hãy kiểm tra điều này:
ssh -V
Bạn sẽ thấy thông tin về phiên bản của SSH-client. Nếu không tìm thấy lệnh, hãy cài đặt nó (trên Ubuntu và các phân phối dựa trên Debian):
sudo apt update
sudo apt install openssh-client
Trên MacOS, SSH-client được cài đặt sẵn, còn nếu bạn đang làm việc trên WSL, cách cài đặt tương tự như trên Linux.
3. Kết nối tới server từ xa qua SSH
Kết nối đến server bằng lệnh:
ssh username@hostname
username
— đây là tên người dùng (user) trên server từ xa.hostname
— đây là địa chỉ IP hoặc tên miền của server.
Ví dụ về kết nối:
ssh student@192.168.1.10
Nếu mọi thứ được cấu hình đúng, hệ thống sẽ yêu cầu nhập mật khẩu. Sau khi nhập mật khẩu, bạn sẽ được chuyển vào bảng điều khiển từ xa của server. Chúc mừng bạn, bạn đã tiến được nửa bước đến nghề "người điều hành siêu ác nhân trong phim về hacker".
4. Cài đặt và cấu hình SSH server
Cài đặt SSH server
Nếu bạn đang làm việc trên server hoặc máy local nơi bạn muốn kết nối, bạn cần cài đặt SSH server. Trên Ubuntu, làm như sau:
sudo apt update
sudo apt install openssh-server
Kiểm tra trạng thái dịch vụ SSH:
sudo systemctl status ssh
Bạn sẽ thấy thông báo kiểu như active (running)
. Nếu server chưa chạy, hãy sử dụng:
sudo systemctl start ssh
sudo systemctl enable ssh
Bây giờ SSH server đã sẵn sàng để nhận kết nối.
Cấu hình SSH server
File cấu hình chính của SSH server là /etc/ssh/sshd_config
. Để chỉnh sửa nó, hãy sử dụng trình soạn văn bản bất kỳ, ví dụ nano
:
sudo nano /etc/ssh/sshd_config
Chú ý đến các tham số sau:
Port 22
— port mà SSH hoạt động.PermitRootLogin no
— không cho phép kết nối bằng root (khuyến khích giữno
vì lý do bảo mật).PasswordAuthentication yes
— cho phép kết nối bằng mật khẩu.
Sau khi thay đổi các tham số, khởi động lại SSH server:
sudo systemctl restart ssh
5. Sử dụng xác thực bằng khóa
Kết nối bằng mật khẩu thì tiện lợi nhưng không an toàn. Lựa chọn tốt nhất là sử dụng khóa SSH.
Tạo khóa SSH
Trên máy client, thực hiện lệnh sau:
ssh-keygen
Script sẽ hỏi đường dẫn để lưu khóa (mặc định là ~/.ssh/id_rsa
). Bạn có thể nhấn Enter để chấp nhận. Sau đó, bạn sẽ được hỏi về passphrase. Tốt nhất là để trống để đơn giản hóa (nhưng điều này không thực sự an toàn).
Sau khi chạy lệnh, các tệp khóa sẽ được tạo:
id_rsa
— khóa riêng tư (đừng làm nó công khai, giống như source code dự án chưa phát hành của bạn, đặc biệt là nếu nó đã tích lũy nợ kỹ thuật).id_rsa.pub
— khóa công khai (khóa này có thể dùng để kết nối).
Chuyển khóa lên server
Sử dụng lệnh ssh-copy-id
để chuyển khóa công khai lên server:
ssh-copy-id username@hostname
Lệnh này sẽ thêm khóa công khai của bạn vào tệp ~/.ssh/authorized_keys
trên server. Giờ đây bạn có thể kết nối mà không cần nhập mật khẩu.
Thử nào:
ssh username@hostname
Nếu mọi thứ thành công, bạn sẽ không được yêu cầu nhập mật khẩu. Cuộc sống của bạn chính thức trở nên đơn giản hơn một chút rồi đấy.
SSH và WSL
Nếu bạn làm việc trên Windows qua WSL, bạn cũng có thể sử dụng SSH. Mở terminal WSL và cài đặt SSH client:
sudo apt update
sudo apt install openssh-client
Các bước tiếp theo tương tự như trên Linux.
6. Phần thực hành: cấu hình SSH trên localhost
Để thực hành, bạn có thể cấu hình kết nối SSH giữa hai máy trong cùng một mạng, hoặc thậm chí trên chính máy tính của bạn (sử dụng localhost
làm địa chỉ).
- Cài đặt SSH server và client trên cùng một máy.
- Kết nối qua địa chỉ cục bộ:
ssh your_user@localhost
- Cấu hình kết nối bằng khóa, như đã hướng dẫn ở trên.
Kết quả cuối cùng sẽ là bạn có thể kết nối mà không cần nhập mật khẩu.
7. Làm việc với tệp cấu hình và aliases của SSH
Nếu bạn thường xuyên kết nối tới nhiều server khác nhau, bạn có thể làm đơn giản hóa cuộc sống của mình bằng cách thêm cấu hình SSH vào file ~/.ssh/config
:
Host myserver
HostName 192.168.1.10
User student
IdentityFile ~/.ssh/id_rsa
Bây giờ bạn có thể kết nối chỉ bằng lệnh:
ssh myserver
Lỗi phổ biến và cách khắc phục
Lỗi "Connection refused". Điều này có nghĩa là SSH server không chạy trên máy từ xa. Hãy đảm bảo rằng nó đã được cài đặt và chạy.
Lỗi "Permission denied". Có thể bạn đã nhập sai mật khẩu hoặc cấu hình khóa không đúng. Hãy kiểm tra nội dung file
~/.ssh/authorized_keys
trên server.Lỗi "No route to host". Hãy kiểm tra xem server có thể truy cập qua mạng hay không (sử dụng
ping
).
Bây giờ bạn đã được trang bị kiến thức về cách cấu hình SSH, sử dụng các khóa và tránh các vấn đề thường gặp. Đây là một công cụ mạnh mẽ, được sử dụng rộng rãi, dù cho việc cấu hình server tại nơi làm việc hay quản lý Raspberry Pi tại nhà.
GO TO FULL VERSION