Làm thế nào để kết nối SSH tồn tại khi khởi động lại mạng?


63

Từ trình vỏ Linux SSH, nhập /etc/init.d/network restartđể khởi động lại dịch vụ mạng.

Tôi hy vọng kết nối SSH của mình sẽ chết vì dịch vụ mạng bị hỏng. Nhưng nó không. Rất tuyệt. Nhưng làm thế nào để Linux đạt được điều này? Làm cách nào để giữ cho kết nối SSH của tôi tồn tại trên dịch vụ khởi động lại?

Câu trả lời:


69

Nó làm điều này bằng cách không làm gì đặc biệt. Mạng khởi động lại trong thời gian ngắn hơn thời gian kết nối TCP mất thời gian, vì vậy kết nối TCP vẫn tồn tại "ngừng hoạt động" giống như cách nó tồn tại trong bất kỳ sự cố ngừng mạng tạm thời nào.

Lý do duy nhất Windows không làm điều tương tự là vì Windows đặc biệt thiết lập lại các kết nối TCP khi giao diện mạng bị hỏng. Điều này, ít nhất có thể được cho là một điều khá xương phải làm bởi vì TCP được thiết kế đặc biệt để tồn tại sự cố ngừng mạng tạm thời.


1
David, điều đó có nghĩa là ngăn xếp TCP / IP không được khởi động lại, phải không? Bởi vì nếu đúng như vậy, máy chủ sẽ mất dấu ổ cắm SSH và quá trình con sshd (cảm ơn Nils) sẽ chấm dứt. Điều này mang đến câu hỏi tiếp theo: Dịch vụ nào quản lý các ổ cắm? TIA.
Serge Wautier

@David Schwartz - Tôi có thể sử dụng thông số nào để thay đổi thời gian chờ? Làm cách nào để tìm ra giá trị thời gian chờ hiện tại? Và nó được cấu hình ở phía máy chủ, hay phía máy khách?
Martin Vegter

@MartinVegter Bạn thực sự không muốn thay đổi các tham số thời gian của kết nối TCP vì chúng phải phối hợp ở cả hai bên và làm rối chúng có thể ảnh hưởng đến khả năng xử lý mất gói của TCP. Tốt hơn hết là bạn nên thiết kế toàn bộ hệ thống để chấp nhận mất kết nối TCP một cách liền mạch bằng cách khôi phục kết nối.
David Schwartz

11

SSHD tạo ra một quá trình con trên kết nối. Quá trình con này sẽ không chết nếu SSHD hoặc toàn bộ mạng được khởi động lại. Đây là lý do tại sao bạn có thể cập nhật ssh và / hoặc cấu hình của nó, thực hiện service sshd restartvà vẫn tiếp tục kết nối với phiên ssh cũ của bạn với các cài đặt cũ. Ngoài ra, ssh phục hồi tốt từ sự cố mất mạng nhỏ.


2
SSH thậm chí không biết về 'mất điện mạng nhỏ', vì lý do được đưa ra bởi David Schwartz. Đây không phải là tài sản của SSH.
dùng207421

Tôi không chắc chắn nếu không có một chút lập trình liên quan đến phía ssh. Về cơ bản tất cả các dịch vụ TCP phải có khả năng chịu lỗi - nhiều dịch vụ thì không. Cần phải có một cơ chế thử lại bổ sung liên quan đến ứng dụng - sau đó dịch vụ thậm chí có thể tồn tại cả những lần mất điện "vừa".
Nils

3
Theo giải thích của EJP, câu trả lời của bạn là đúng nhưng không liên quan.
Gilles 'SO- ngừng trở nên xấu xa'

3
Câu trả lời này rất hữu ích với tôi vì nó bổ sung cái nhìn sâu sắc về những gì sshdcần tránh để tiếp tục service sshd restart. Nếu bạn cập nhật sshd( cập nhật bảo mật, v.v.), các tiến trình con vẫn sẽ chạy trên mã gốc (cập nhật trước), nhưng sẽ tiếp tục cung cấp dịch vụ, thay vì bị gián đoạn. Tôi đoán tính khả dụng của ổ cắm nghe cho sshdquy trình chính bị gián đoạn rất ngắn, tuy nhiên, khi quá trình con đầu tiên kết thúc và giao diện mạng trong giây lát cho biết cổng đã đóng.
allquixotic 14/12/13

1
@Nils Tôi biết rằng bạn đã viết rằng. Nhưng điều này làm cho người đọc trung bình nghĩ rằng forking có liên quan. Nhưng điều tương tự cũng xảy ra đối với các chương trình không rẽ nhánh. Câu trả lời của bạn là đại loại như: "Bởi vì thép mạnh hơn sắt, táo có màu đỏ"
Daniel Alder
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.