Cách gỡ lỗi kết nối SSH

Hướng dẫn này sẽ giới thiệu cho các bạn một số phương pháp và kỹ thuật nhanh chóng mà bạn có thể sử dụng để chẩn đoán các kết nối SSH khác nhau, bao gồm cả khi bạn không thể kết nối với SSH, lỗi Xác thực, v.v.

LƯU Ý: Trước khi bắt đầu, hãy đảm bảo rằng thiết bị bạn muốn kết nối đang trực tuyến và lỗi không phải do thiết bị không khả dụng.

Sự cố 1: Dịch vụ SSH không chạy

Nguyên nhân phổ biến của lỗi kết nối SSH là dịch vụ không chạy trên máy chủ từ xa. Điều này có thể là do dịch vụ vô tình tắt hoặc dịch vụ không bắt đầu sau khi khởi động lại hệ thống.

Để kiểm tra xem dịch vụ SSH có đang chạy hay không, hãy sử dụng trình quản lý hệ thống bằng lệnh:

# sudo systemctl status sshd

Lệnh trên sẽ thông báo nếu dịch vụ đang chạy hay không, như được hiển thị trong ảnh chụp màn hình bên dưới.

Giải pháp

Để giải quyết các sự cố SSH do dịch vụ không chạy, hãy sử dụng hệ thống để khởi động dịch vụ. Nếu dịch vụ phản hồi có lỗi, hãy kiểm tra nhật ký và khắc phục sự cố được báo cáo trong nhật ký.

Sử dụng lệnh bên dưới để kiểm tra nhật ký dịch vụ.

grep 'sshd' / var / log / auth.log

Sử dụng lệnh dưới đây để bắt đầu hoặc dừng dịch vụ SSH bằng systemd.

sudo systemctl start sshd

Vấn đề 2: SSH trên cổng không chuẩn

Vấn đề phổ biến thứ hai khi gỡ lỗi các kết nối SSH là việc sử dụng một cổng không chuẩn. Nếu SSH đang chạy trên một cổng khác không phải là cổng mặc định 22, bạn sẽ không kết nối với máy chủ từ xa trừ khi bạn chỉ định rõ ràng cổng mà SSH đang chạy.

Để xem cổng mà SSH đang chạy, hãy sử dụng một công cụ như netstat như sau:

[ centos @ centos8 ~ ] $ sudo netstat -ptln | grep ssh
tcp 0 0 0.0.0.0: 56 0.0.0.0: * NGHE       1131 / sshd          
tcp6 0 0 ::: 56 ::: * LISTEN 1131 / sshd

Kết quả trên cho thấy dịch vụ SSH đang chạy trên cổng nào. Trong trường hợp này, đó là cổng 56.

Giải pháp

Để giải quyết vấn đề này, bạn có thể sử dụng thông tin từ netstat để chỉ định rõ ràng cổng trong lệnh ssh của bạn như:

ssh username@ ip -p 56

Vấn đề 3: Một Dịch vụ khác sử dụng cùng một cổng

Một nguyên nhân khác gây ra lỗi kết nối SSH là nếu một dịch vụ hoặc quy trình khác cũng sử dụng cùng một cổng với dịch vụ SSH. Ví dụ: nếu SSH được chỉ định rõ ràng để chạy trên cổng 80 (ý tưởng khủng khiếp), một dịch vụ như Apache có thể đang sử dụng cùng một cổng.

Để xem liệu quá trình khác có đang sử dụng cùng một cổng như SSH hay không, hãy kiểm tra nhật ký bằng lệnh:

sudo journalctl -t sshd

Lệnh này sẽ trả về một lỗi như được hiển thị bên dưới, cho biết liệu một quá trình khác có sử dụng cổng bị ràng buộc SSH hay không.

sshd[110611]: error: Bind to port 80 on 0.0.0.0 failed: Address already in use

Tốt là bạn nên đảm bảo rằng lỗi liên kết cổng là do dịch vụ khác gây ra, không phải do các biện pháp bảo mật như SELinux.

Giải pháp

Có nhiều cách bạn có thể sử dụng để giải quyết vấn đề này. Bao gồm các:

Đầu tiên là liên kết dịch vụ SSH với một cổng khác. Bạn có thể thực hiện việc này bằng cách chỉnh sửa tệp cấu hình SSH. Ví dụ: thay đổi mục nhập Cổng thành cổng 3009 như được hiển thị trong các lệnh:

sudo nano / etc / ssh / sshd_config
Cổng 3009

Một phương pháp khác mà bạn có thể sử dụng để giải quyết vấn đề này là dừng dịch vụ bằng cổng SSH. Ví dụ: dừng dịch vụ apache bằng cách sử dụng cổng 80 như:

sudo systemctl stop httpd
sudo systemctl disable httpd

Vấn đề 4: Tường lửa

Nếu bạn đã thử tất cả các phương pháp trên mà vẫn không có kết nối SSH, bạn có thể chuyển sang nguyên nhân tiếp theo có thể gây ra sự cố: Hạn chế tường lửa. Tùy thuộc vào phương pháp Tường lửa bạn đang sử dụng (UFW hoặc Iptables), bạn cần đảm bảo rằng tường lửa cho phép các kết nối SSH.

Giải pháp

Các quy tắc tường lửa rất rộng và có thể thay đổi tùy thuộc vào cấu hình hệ thống. Vì vậy, tôi không thể bao quát mọi khía cạnh. Tuy nhiên, sau đây là một giải pháp đơn giản để đảm bảo dịch vụ SSH được phép trên UFW Firewall.

sudo ufw allow < ssh_port > / tcp

Bạn cũng có thể đặt lại tất cả các quy tắc UFW và bắt đầu lại. Điều đó sẽ cho phép bạn khắc phục sự cố kết nối tường lửa từ đầu.

sudo ufw reset

Vấn đề 5: Đăng nhập mật khẩu bị vô hiệu hóa

Đôi khi bạn có thể định cấu hình SSH không chấp nhận đăng nhập bằng mật khẩu và chỉ sử dụng xác thực khóa công khai. Điều đó có thể gây ra sự cố nếu khóa công khai không có sẵn trên máy chủ hoặc thiếu cặp khóa riêng tư của bạn.

Để kiểm tra xem đăng nhập bằng mật khẩu có được phép hay không, hãy lập cấu hình ssh như sau:

[ centos @ centos8 ] $ sudo grep PasswordAuthentication / etc / ssh / sshd_config
#PasswordAuthentication yes
PasswordAuthentication yes
# PasswordAuthentication. Tùy thuộc vào cấu hình PAM của bạn,
xác thực # PAM, sau đó bật tính năng này nhưng đặt PasswordAuthentication

Kết quả trên cho thấy rằng đăng nhập mật khẩu được phép.

Giải pháp

Để giải quyết vấn đề trên, bạn có thể sử dụng hai phương pháp:

Trước tiên, nếu bạn đặt giá trị thành không, hãy thay đổi giá trị PasswordAuthentication thành có và khởi động lại dịch vụ ssh.

Phương pháp khác là tạo một cặp khóa-giá trị ssh và sử dụng nó để đăng nhập vào máy chủ.

Phần kết luận

Trong hướng dẫn nhanh này, chúng tôi đã thảo luận về các nguyên nhân chính gây ra lỗi kết nối SSH và cách bạn có thể giải quyết chúng. Mặc dù hướng dẫn này đề cập đến các vấn đề phổ biến, bạn có thể tìm thấy các lỗi cụ thể đối với hệ thống của mình dựa trên cấu hình và quyền.