SSH là một giao thức mạng cho phép bạn truy cập và quản lý một hệ thống từ xa qua mạng một cách an toàn. Trong khi kết nối với máy từ xa qua SSH, bạn có thể đã gặp phải lỗi “kết nối bị từ chối”. Gặp phải sự cố này có thể gây khó chịu, đặc biệt nếu bạn là quản trị viên hệ thống và phải thực hiện khẩn cấp một số tác vụ trên hệ thống từ xa.
Hãy xem xét một số nguyên nhân có thể gây ra lỗi SSH “kết nối bị từ chối” và các phương pháp giải quyết.
1. Kiểm tra xem máy chủ SSH đã được cài đặt chưa
Một nguyên nhân có thể gây ra lỗi “kết nối bị từ chối” là máy từ xa không chạy máy chủ SSH. Nếu không có máy chủ SSH, máy sẽ không chấp nhận các kết nối SSH đến và bạn sẽ không thể truy cập từ xa.
Vì vậy, bước đầu tiên để khắc phục lỗi là kiểm tra xem máy chủ SSH có được cài đặt trên máy từ xa hay không. Sử dụng lệnh sau để xác minh cài đặt máy chủ SSH:
Trên các bản phân phối dựa trên Debian:
dpkg --list | grep ssh
Trên các bản phân phối dựa trên RHEL:
yum list installed | grep ssh
Trên openSUSE:
zypper search -i | grep ssh
Trên các bản phân phối dựa trên Arch:
pacman -Q | grep ssh
Nếu máy chủ SSH được cài đặt trên máy từ xa, bạn sẽ thấy nó được liệt kê trong đầu ra. Nếu không, bạn phải cài đặt máy chủ OpenSSH trên máy từ xa mà bạn muốn truy cập qua SSH. OpenSSH là phiên bản mã nguồn mở của các công cụ SSH để truy cập và điều khiển hệ thống từ xa.
Để cài đặt máy chủ OpenSSH, hãy sử dụng các lệnh sau:
Trên các bản phân phối dựa trên Debian:
sudo apt install openssh-server
Trên các bản phân phối dựa trên RHEL:
sudo yum install openssh-server
Trên openSUSE:
sudo zypper install openssh
Trên các bản phân phối dựa trên Arch:
pacman -S openssh
2. Kiểm tra Trạng thái Dịch vụ SSH
Một lý do khác dẫn đến lỗi “kết nối bị từ chối” có thể là do dịch vụ SSH bị tắt hoặc không chạy trên máy từ xa. Khi bạn chắc chắn rằng máy chủ SSH đã được cài đặt, điều thứ hai bạn cần kiểm tra là trạng thái của máy chủ.
sudo systemctl status sshd
Nếu dịch vụ đang hoạt động, đầu ra sẽ cho biết dịch vụ đó là đang hoạt động (đang chạy). Nếu không, bạn sẽ thấy một cái gì đó như không hoạt động (chết).
Nếu máy chủ SSH không chạy, bạn có thể khởi động thủ công bằng lệnh sau:
sudo systemctl start sshd
Bạn cũng có thể kích hoạt dịch vụ tự động khởi động khi khởi động với:
sudo systemctl enable sshd
3. Kiểm tra cổng SSH
Theo mặc định, máy chủ SSH chạy trên cổng 22. Tuy nhiên, người ta có thể thay đổi cổng mặc định. Do đó, nếu bạn gặp lỗi SSH “kết nối bị từ chối”, có thể là do bạn đang cố gắng kết nối với máy chủ SSH trên cổng mặc định 22 trong khi nó đang chạy trên một số cổng khác.
Bạn có thể sử dụng lệnh netstat với grep để tìm cổng mà máy chủ SSH đang lắng nghe:
sudo netstat -plntu | grep ssh
Bạn cũng có thể tìm thấy cổng SSH từ sshd_config tệp bằng lệnh sau:
grep port /etc/ssh/sshd_config
Sau khi xác định đúng cổng SSH, hãy thử kết nối với hệ thống từ xa của bạn bằng cổng cụ thể đó.
4. Kiểm tra tường lửa hệ thống của bạn
Hầu hết các sự cố kết nối xảy ra do tường lửa trên máy của bạn chặn một số cổng hoặc dịch vụ. Nếu máy từ xa đã cài đặt và chạy máy chủ SSH, bước tiếp theo là kiểm tra tường lửa của bạn.
Để tìm hiểu xem tường lửa có đang chặn kết nối hay không, hãy tạm thời tắt tường lửa bằng các lệnh sau:
Trên các bản phân phối Linux dựa trên Debian và Arch:
sudo ufw disable
Trên các bản phân phối dựa trên RHEL và openSUSE:
sudo systemctl disable firewalld
Nếu lỗi không xuất hiện sau khi tắt tường lửa, điều đó có nghĩa là tường lửa đã chặn kết nối. Trong trường hợp này, hãy bật lại tường lửa và thêm quy tắc cho phép SSH.
Trên các bản phân phối Linux dựa trên Debian và Arch, hãy sử dụng lệnh sau để cho phép SSH trong tường lửa UFW:
sudo ufw allow ssh
Ngoài ra, bạn cũng có thể cho phép SSH theo số cổng trong tường lửa. Giả sử máy chủ SSH đang sử dụng cổng 5555, sau đó bạn sẽ sử dụng lệnh sau để cho phép nó vào tường lửa:
sudo ufw allow 5555
Để xác minh xem quy tắc đã được thêm thành công hay chưa, hãy kiểm tra trạng thái UFW:
sudo ufw status
Trên các bản phân phối dựa trên RHEL và openSUSE, hãy sử dụng lệnh sau để cho phép SSH trong tường lửa:
sudo firewall-cmd --permanent --add-service=ssh
Để cho phép SSH theo số cổng, hãy sử dụng lệnh sau:
sudo firewall-cmd --permanent --add-port={port}/tcp
Đối với máy chủ SSH chạy trên cổng 4444, lệnh sẽ là:
sudo firewall-cmd --permanent --add-port=4444/tcp
Để xác minh việc bổ sung thành công quy tắc trong tường lửa, hãy chạy:
sudo firewall-cmd --list-all
5. Giải quyết xung đột địa chỉ IP
Cũng có khả năng xảy ra lỗi SSH “kết nối bị từ chối” do IP máy chủ SSH xung đột với IP của hệ thống khác trong mạng. Điều này xảy ra khi hai hệ thống trên mạng yêu cầu có cùng địa chỉ IP, dẫn đến xung đột IP.
Để xác nhận xem có xung đột IP trong mạng của bạn hay không, hãy sử dụng công cụ arp-scan như sau:
arp-scan [network-id]
Nếu có xung đột IP, bạn sẽ thấy địa chỉ IP trùng lặp ở đầu ra. Ảnh chụp màn hình bên dưới là một ví dụ về xung đột IP trong mạng:
Để tránh xung đột IP, đảm bảo không có thiết bị nào có địa chỉ IP tĩnh trùng với địa chỉ nhóm DHCP.
Mẹo thưởng: Chạy SSH ở Chế độ Verbose
Bất cứ khi nào bạn gặp lỗi SSH, hãy thử chạy lệnh ssh ở chế độ chi tiết để theo dõi sự cố. Để chạy SSH ở chế độ dài dòng, hãy sử dụng lệnh ssh với -vvv tùy chọn như sau:
ssh -vvv username@ip_address
Ở chế độ chi tiết, bạn sẽ thấy các thông báo gỡ lỗi trong mỗi bước kết nối sẽ giúp bạn hiểu vấn đề nằm ở đâu.
Khắc phục sự cố Lỗi “Kết nối bị từ chối” SSH trên Linux
Bằng cách xác định các nguyên nhân tiềm ẩn gây ra lỗi kết nối SSH và triển khai các giải pháp được đề xuất, bạn sẽ có thể khắc phục sự cố và giải quyết lỗi “kết nối bị từ chối” SSH. Ngoài các bước này, hãy đảm bảo rằng bạn đang kết nối với đúng địa chỉ IP và sử dụng đúng thông tin đăng nhập.
Để làm cho kết nối từ xa của bạn an toàn hơn, bạn có thể thiết lập xác thực hai yếu tố cho SSH trên Linux.