ServerAliveCountMax trong SSH


24

ServerAliveCountMax trong SSH thực sự làm gì?

Tôi đang cố gắng đảm bảo rằng khi tôi kết nối với máy chủ của mình thông qua SSH thì kết nối vẫn mở trong một thời gian dài thay vì kết nối bị chết sau một thời gian ngắn không hoạt động. Đây là ví dụ

Host *
    ServerAliveInterval 60
    ServerAliveCountMax 2

Tôi đã nghe từ một nguồn rằng cài đặt ở trên sẽ luôn gửi phản hồi đến máy chủ cứ sau 60 giây miễn là máy chủ nhận được phản hồi đó. Tuy nhiên, nếu vì lý do nào đó, phản hồi không được gửi đến máy chủ, nó sẽ thử và gửi một tin nhắn khác. Nếu thông báo đó cũng thất bại, thì nó sẽ đóng kết nối. (Tôi cảm thấy điều này là sai)

Nguồn thứ haithứ ba tuy nhiên nói điều gì đó khác nhau. Họ tuyên bố rằng một tin nhắn sẽ được gửi đến máy chủ cứ sau 60 giây nếu có một khoảng thời gian không hoạt động, nhưng nó sẽ chỉ gửi qua 2 yêu cầu và sau đó nó sẽ đóng kết nối.

Vậy chính xác thì ServerAliveCountMax làm gì?

Câu trả lời:


31

Cảm giác của bạn rằng "điều này là sai" là chính xác. Xem trang người đàn ông :

 ServerAliveCountMax
         Sets the number of server alive messages (see below) which may be
         sent without ssh(1) receiving any messages back from the server.
         If this threshold is reached while server alive messages are
         being sent, ssh will disconnect from the server, terminating the
         session.  It is important to note that the use of server alive
         messages is very different from TCPKeepAlive (below).  The server
         alive messages are sent through the encrypted channel and there‐
         fore will not be spoofable.  The TCP keepalive option enabled by
         TCPKeepAlive is spoofable.  The server alive mechanism is valu‐
         able when the client or server depend on knowing when a connec‐
         tion has become inactive.

         The default value is 3.  If, for example, ServerAliveInterval
         (see below) is set to 15 and ServerAliveCountMax is left at the
         default, if the server becomes unresponsive, ssh will disconnect
         after approximately 45 seconds.  This option applies to protocol
         version 2 only.

 ServerAliveInterval
         Sets a timeout interval in seconds after which if no data has
         been received from the server, ssh(1) will send a message through
         the encrypted channel to request a response from the server.  The
         default is 0, indicating that these messages will not be sent to
         the server.  This option applies to protocol version 2 only.

3
Trang man rõ ràng Intervalđược thiết lập để 0vô hiệu hóa nó. Nhưng nó không phải là rõ ràng nếu bạn thiết lập Maxđể 0. Nó sẽ gửi ping vô hạn Alive, hoặc không?
gcb

Tôi không rõ nếu cài đặt ServerAliveInterval 0 sẽ duy trì kết nối mở vô thời hạn hay không
Francesco

1
@Francesco Theo mặc định, kết nối sẽ vẫn mở mãi mãi, trừ khi một đầu rõ ràng đóng nó.
Michael Hampton

5

Tin nhắn sống của máy chủ rất hữu ích khi máy chủ SSH đã được định cấu hình để đóng kết nối sau một khoảng thời gian không có lưu lượng truy cập (các nhà cung cấp dịch vụ lưu trữ web chia sẻ cung cấp quyền truy cập SSH hầu như luôn luôn làm điều này chẳng hạn). Đặt hai tùy chọn này sẽ gửi một gói mỗi ServerAliveIntervalgiây, trong ServerAliveCountMaxthời gian tối đa, do đó giữ cho phiên tồn tại.

Để trả lời các ý kiến ​​về sự không chắc chắn của việc đặt tùy chọn này 0, tôi đã đọc qua mã nguồn của việc opensshtriển khai và đây là những gì tôi thấy ...

  • Thiết ServerAliveIntervalđể 0sẽ KHÔNG gửi các gói dữ liệu, nhưng nó sẽ giữ phiên sống vô thời hạn giả định rằng các kết nối không giảm do thời gian chờ TCP và máy chủ không được cấu hình để thả khách hàng không hoạt động.

  • Thiết ServerAliveCountMaxđể 0có tác dụng tương tự như thiết lập ServerAliveIntervalđể 0.

  • Đặt giá trị thành âm hoặc bất kỳ giá trị nào lớn hơn INT_MAX(ví dụ: 2.147.483.647) sẽ dẫn đến lỗi "giá trị nguyên ..." .

  • Việc đặt ServerAliveCountMaxgiữa INT_MAX/1000+1(ví dụ: 2.147.484) thành INT_MAX(tức là 2.147.483.647) cũng sẽ tương đương với việc đặt giá trị thành 0.

Vì vậy, về bản chất, thời gian chờ nhiều nhất bạn có thể nhận được (trong khi vẫn gửi các gói) là INT_MAX/1000(tức là 2.147.483). Với thời gian chờ 1và không có lưu lượng truy cập vào các phiên, điều đó sẽ giúp bạn có được gần 25 ngày.

Rõ ràng, các triển khai SSH khác có thể có kết quả khác nhau.

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.