Lỗi Connection Refused: Nguyên nhân và Cách khắc phục

Tác giả: VPS chính hãng 03 tháng 07, 2023

SSH là viết tắt của Secure Shell hoặc Secure Socket Shell, là một giao thức mạng và giải pháp bảo mật cho người dùng, đặc biệt là quản trị viên hệ thống, truy cập máy tính và chương trình từ xa trong một mạng không an toàn. Giao thức SSH đảm bảo giao tiếp dữ liệu giữa hai máy tính với xác thực và mã hóa mạnh mẽ, đồng thời tạo điều kiện và tăng tốc các nhiệm vụ của quản trị viên mạng. Đôi khi, khi truy cập vào VPS từ xa, bạn gặp lỗi SSH Connection Refused, đây là lỗi phổ biến mà hầu hết người dùng đều gặp phải. Đừng lo lắng về vấn đề này, lỗi này có nhiều lý do và giải pháp khác nhau có thể được giải quyết bằng cách khắc phục sự cố và các cài đặt đơn giản. 

Tại sao lại xảy ra lỗi Connection refused?

Sau khi mua VPS Linux, bước đầu tiên mà hầu hết người dùng thực hiện để bảo vệ máy chủ và dữ liệu của họ là cài đặt và kích hoạt dịch vụ SSH trên VPS Linux của họ. Sử dụng SSH, tất cả xác thực người dùng, lệnh, đầu ra và truyền tệp đều được mã hóa để bảo vệ chống lại các cuộc tấn công mạng.

Khi bạn nhận được thông báo lỗi SSH Connection refused, điều đó có nghĩa là giao thức SSH đã bị gián đoạn trong việc thiết lập liên lạc trong mạng và không thể bảo mật và mã hóa dữ liệu trong quá trình liên lạc giữa máy khách và máy chủ. Ngoài ra, nếu kết nối SSH không thành công, ngoài việc không có kết nối an toàn với máy chủ trong mạng không an toàn, bạn sẽ gặp khó khăn khi thực hiện các tác vụ quản lý nâng cao, thực thi lệnh và truyền tệp.

Nguyên nhân gây ra lỗi Connection Refused và cách khắc phục

Nhiều lý do có thể gây ra sự gián đoạn và lỗi trong kết nối SSH. Bạn sẽ không thể giải quyết vấn đề cho đến khi bạn xác định được lý do nhận lỗi. Trong phần sau đây, chúng tôi trình bày các lý do phổ biến nhất dẫn đến lỗi SSH Connection refused và cách khắc phục lỗi với các giải pháp hiệu quả.

1. Máy chủ không hỗ trợ SSH Daemon

Nếu bạn chưa cài đặt phiên bản SSH của máy chủ để nghe và chấp nhận kết nối, bạn có thể gặp phải lỗi Connection refused. Nhiệm vụ chính của SSH Daemon là tiếp nhận các yêu cầu xác thực từ phía máy khách, nên nếu SSH Daemon không được cài đặt trên máy chủ, nó sẽ từ chối các yêu cầu kết nối với máy chủ. Do đó, một trong những lý do có thể gây ra lỗi trong kết nối SSH có thể là do không cài đặt SSH Daemon trên máy chủ và cấu hình SSH Daemon không chính xác ở phía máy chủ, điều này sẽ khiến kết nối đến máy chủ bị từ chối.

SSH Daemon không được hỗ trợ là nguyên nhân gây lỗi Connection refused

SSH Daemon không được hỗ trợ là nguyên nhân gây lỗi Connection refused

Giải pháp: Đảm bảo rằng SSH Daemon được cài đặt trên máy chủ và bật SSH

Để có thể xác định được nguyên nhân nhận được lỗi SSH Connection refused là do SSH daemon chưa được cài đặt hay do các yếu tố khác khiến kết nối SSH không thành công, trước tiên bạn phải kiểm tra xem SSH Daemon có được triển khai trên máy của bạn hay không. Vì vậy, hãy kiểm tra xem SSH Daemon đã được cài đặt trên máy chủ của bạn chưa bằng cách chạy lệnh sau:

ssh localhost

Output:

ssh: connect to host localhost port 22: Connection refused

Nếu đầu ra của bạn giống với đầu ra chúng tôi cung cấp và bạn nhận được thông báo Connection refused, bạn phải cài đặt và kích hoạt SSH Daemon trên máy chủ để giải quyết vấn đề này.

Để cài đặt các công cụ SSH như Open SSH trên máy chủ, bạn có thể chạy lệnh sau với quyền sudo:

sudo apt install openssh-server

Lưu ý: May mắn thay, hầu hết các nhà cung cấp máy chủ ngày nay đều cài đặt daemon SSH trên VPS theo mặc định. Nếu bạn sử dụng VPS, đừng lo lắng về điều này. Thông thường, sự cố này tồn tại trong các máy chủ lưu trữ chuyên dụng và cục bộ.

=>> Cách kiểm tra số lần đăng nhập SSH không thành công trong VPS Linux

2. SSH Client chưa được cài đặt

Giống như việc cài đặt SSH daemon trên máy chủ để chấp nhận các yêu cầu từ phía máy khách, bạn cũng phải cài đặt phần mềm SSH với phiên bản máy khách trên thiết bị cục bộ để giao tiếp từ xa với máy chủ. Việc không cài đặt SSH Client trên thiết bị cục bộ là một yếu tố khác dẫn đến lỗi SSH Connection refused khi kết nối từ xa với máy chủ thông qua SSH. Bạn phải đảm bảo rằng SSH Client đã được cài đặt và bật trên thiết bị cục bộ.

Giải pháp: Cài đặt SSH Client

Nếu bạn thấy rằng hệ thống cục bộ của mình không hỗ trợ phần mềm SSH Client, cài đặt SSH Client có thể giải quyết vấn đề nhận lỗi kết nối SSH. Không khó để cài đặt SSH Client trên máy cục bộ, chỉ cần nhập các lệnh sau vào Linux terminal.

Nếu bạn đang sử dụng hệ điều hành Ubuntu/Debian, hãy chạy lệnh sau để cài đặt SSH Client:

sudo apt install openssh-client

Nếu hệ điều hành của bạn là dẫn xuất của CentOSRHEL, bạn phải chạy lệnh sau:

sudo yum install openssh-client

3. Đóng cổng SSH

Cổng là đích cuối cùng chấp nhận yêu cầu kết nối với máy chủ và để tăng tính bảo mật cũng như ngăn chặn tin tặc truy cập vào máy chủ, quản trị viên hệ thống thường đóng các cổng dễ bị tấn công. Vì SSH sử dụng cổng mặc định 22 để gửi yêu cầu kết nối nếu cổng SSH không được mở trên máy chủ hoặc cổng được định cấu hình sai, bạn sẽ nhận được thông báo SHH bị từ chối kết nối khi cố gắng kết nối với máy chủ từ xa qua SSH. Lúc này đóng cổng SSH sẽ ngăn truy cập vào máy chủ.

Giải pháp: Mở Cổng SSH nếu nó bị đóng

Để kiểm tra xem cổng SSH mặc định (cổng 22) đang mở hay đóng, bạn có thể truy cập danh sách các cổng đang hoạt động bằng cách chạy lệnh sau:

sudo lsof -i -n -P | grep LISTEN

Trong đầu ra của lệnh này, bạn sẽ thấy một danh sách các cổng ở chế độ LISTEN, tìm cổng 22 (cổng SSH) trong danh sách các cổng.

Bạn cũng có thể tìm kiếm cổng 22 trong danh sách các cổng chế độ LISTEN hiện tại theo cách tùy chỉnh:

sudo lsof -i:22

Nhưng nếu bạn không tìm thấy cổng 22 trong danh sách được cung cấp, bạn phải mở cổng SSH bằng cách chạy lệnh iptables để kết nối với máy chủ:

sudo iptables -A INPUT -p tcp --dport 22 -m conntrack --ctstate NEW,ESTABLISHED -j ACCEPT

Lưu ý: Bạn có thể mở cổng 22 thông qua cài đặt tường lửa của mình.

=>> Cách kiểm tra các Port đang mở trong VPS Linux

4. Thông tin đăng nhập sai

Một trong những yếu tố khiến bạn thất bại khi cố gắng kết nối với máy chủ SSH là nhập sai thông tin đăng nhập như tên người dùng FTP, mật khẩu FTP, cổng, địa chỉ IP của máy chủ hoặc tên miền.

Giải pháp: Kiểm tra tính hợp lệ của thông tin đã nhập khi cố gắng kết nối

Để tránh nhận lỗi Connection refused, tốt hơn hết bạn nên cẩn thận khi nhập thông tin đăng nhập để nhập thông tin chính xác. Đôi khi một số nhà cung cấp dịch vụ lưu trữ thay đổi cổng SSH mặc định để tăng tính bảo mật. Vì vậy bạn nên lưu ý về việc thay đổi cổng. Ngoài ra, hãy nhập chính xác địa chỉ IP của máy chủ mà bạn muốn kết nối và ghi lại tên người dùng và mật khẩu cẩn thận để ghi nhớ nó.

Để biết cổng được đặt cho kết nối SSH, bạn có thể chạy lệnh sau:

grep Port /etc/ssh/sshd_config

Output:

#Port 22 

#GatewayPorts no

Bằng cách thực hiện lệnh trên, cổng được mở cho kết nối SSH sẽ được hiển thị và bạn có thể đảm bảo rằng cổng bạn nhập cho kết nối SSH là chính xác.

Đảm bảo số cổng nhập cho kết nối SSH là chính xác

Đảm bảo số cổng nhập cho kết nối SSH là chính xác

5. Dịch vụ SSH ngừng hoạt động

Để kết nối với máy chủ, dịch vụ SSH phải được kích hoạt và đang chạy để nghe và chấp nhận các yêu cầu từ phía máy khách để kết nối với máy chủ. Trong trường hợp bạn có lưu lượng truy cập tăng đột xuất hoặc gặp phải các cuộc tấn công DDOS hoặc mất tài nguyên, dịch vụ SSH trên máy chủ của bạn có thể bị vô hiệu hóa và ngừng hoạt động. Trong tình huống này, bạn sẽ không thể kết nối với máy chủ thông qua SSH vì dịch vụ SSH không hoạt động và lý do nhận được lỗi kết nối SSH có thể là do dịch vụ SSH bị vô hiệu hóa.

Giải pháp: Kích hoạt dịch vụ SSH

Nếu bạn cảm thấy dịch vụ SSH có vấn đề và không hoạt động, hãy kiểm tra bằng cách chạy lệnh sau:

sudo service ssh status

Nếu bạn thấy Active: active (running) trong đầu ra của lệnh trước đó, thì lý do nhận được lỗi SSH Connection refused không phải do dịch vụ SSH không hoạt động, mà là do bạn không thấy kích hoạt dịch vụ SSH , trước tiên bạn phải khởi động dịch vụ SSH bằng cách thực hiện lệnh sau:

systemctl start sshd

Sau đó chạy lệnh systemctl enable để kích hoạt dịch vụ SSH khi khởi động:

sudo systemctl enable sshd

6. Cài đặt tường lửa liên quan đến kết nối SSH

Như chúng tôi đã đề cập, các cổng mở có thể là một cách dẫn đến rủi ro bảo mật và xâm nhập bất hợp pháp. Vì lý do này, để tăng cường bảo mật cho máy chủ, các quy tắc được đặt trong tường lửa để chặn các cổng nhằm ngăn người dùng không xác định truy cập vào máy chủ. Đôi khi, lý do nhận được lỗi SSH Connection refused là do chặn kết nối SSH và các hạn chế được áp dụng trong cài đặt tường lửa ngăn kết nối SSH với máy chủ.

Giải pháp: Cho phép kết nối SSH trong tường lửa

Nếu các hạn chế được định cấu hình trong tường lửa ngăn kết nối SSH, để giải quyết vấn đề này, bạn cần thay đổi cài đặt tường lửa để cho phép kết nối SSH. Điều đầu tiên cần làm trước khi cho phép kết nối SSH trong tường lửa là kiểm tra các quy tắc trong tường lửa. Với mục đích này, hãy nhập lệnh sau:

sudo iptables-save # display IPv4 rules 

sudo ip6tables-save # display IPv6 rules

Trong danh sách các quy tắc được đặt trong tường lửa, thấy các thành phần dport 22, REJECT và DROP có nghĩa là các kết nối SSH đã bị chặn. Nếu bạn tìm thấy các thành phần này trong danh sách quy tắc tường lửa, bạn phải cho phép kết nối SSH bằng cách chạy lệnh sau:

sudo ufw cho phép ssh

Output:

Rules updated 

Rules updated(v6)

SSH là một giao thức được thiết kế để bảo mật các kết nối giữa máy chủ và máy khách, do khả năng mà nó cung cấp để bảo vệ máy chủ mà việc kích hoạt dịch vụ SSH trên máy chủ đã trở thành một trong những yếu tố quan trọng đối với người quản trị. Đôi khi khi kết nối với máy chủ bằng SSH, người dùng gặp lỗi SSH Connection refused, đây là một trong những lỗi phổ biến nhất khi cố gắng truy cập máy chủ. Các lý do chính là do dịch vụ SSH bị ngừng hoạt động, cổng SSH bị đóng và các kết nối SSH bị chặn trong tường lửa. Chúng tôi hy vọng rằng bằng cách đọc bài viết này, bạn sẽ có thể kết nối với máy chủ của mình mà không xuất hiện bất kì một vấn đề nào. Chúc các bạn thành công!