Linux không hết thời gian kết nối SSH nhàn rỗi. Bạn có thể để kết nối SSH mở vô thời hạn và miễn là không có điểm cuối nào được khởi động lại hoặc có địa chỉ IP mới, kết nối sẽ vẫn hoạt động khi bạn truy cập sau một thời gian dài.
Tuy nhiên, nếu có bất kỳ hộp trung gian trạng thái nào (NAT, tường lửa, v.v.) có khả năng hết thời gian kết nối nhàn rỗi. Kết quả của điều đó là mặc dù kết nối còn sống ở cả hai đầu, hai điểm cuối không thể giao tiếp được nữa vì hộp giữa không từ chối chuyển tiếp bất kỳ gói tin nào cho đến khi máy khách SSH mở kết nối mới.
Nếu bạn biết thời gian chờ của middlebox, bạn có thể làm việc xung quanh vấn đề bằng cách cấu hình ClientAliveInterval
trong /etc/ssh/sshd_config
trên máy chủ hoặc ServerAliveInterval
ở ~/.ssh/config
trên máy khách. Để phát hiện tối ưu các kết nối bị hỏng, nên bật cả hai cài đặt. Điều này cũng sẽ phát hiện các kết nối bị hỏng khi một trong hai điểm cuối đã được khởi động lại hoặc đã nhận được một địa chỉ IP mới.
Vì bạn chỉ ra rằng thời gian chờ đôi khi dường như thấp đến vài giây, điều này có thể không đủ để giải quyết vấn đề của bạn. Thời gian chờ rõ ràng rất thấp có thể do CGN bị quá tải hoặc bị định cấu hình sai. Bạn cần kiểm tra lưu lượng tại các điểm khác nhau của đường dẫn liên lạc để tìm hiểu xem CGN có chịu trách nhiệm cho các lỗi không.
Nếu hóa ra lỗi là do ISP của bạn làm điều gì đó ngớ ngẩn, chẳng hạn như kết nối cân bằng tải trên nhiều CGN không chia sẻ trạng thái kết nối, bạn không thể tự khắc phục sự cố bằng cách điều chỉnh cấu hình SSH của mình.
Nếu bạn tình cờ bị mắc kẹt với ISP có CGN không đáng tin cậy mà họ từ chối sửa, thì các tùy chọn duy nhất tôi biết là nâng cấp cả máy khách và máy chủ lên phiên bản kernel có hỗ trợ MPTCP hoặc sử dụng giải pháp đường hầm được thiết kế để tự chịu đựng thay đổi trong ánh xạ cổng trên NAT.