ServerAliveCountMax ใน SSH


24

ServerAliveCountMax ใน SSH ทำอะไรจริงๆ

ฉันพยายามที่จะให้แน่ใจว่าเมื่อฉันเชื่อมต่อกับเซิร์ฟเวอร์ของฉันผ่าน SSH ว่าการเชื่อมต่อยังคงเปิดอยู่เป็นระยะเวลานานแทนที่จะเชื่อมต่อที่กำลังจะตายหลังจากไม่มีการใช้งานในช่วงเวลาสั้น ๆ นี่คือตัวอย่าง

Host *
    ServerAliveInterval 60
    ServerAliveCountMax 2

ฉันได้ยินมาจากแหล่งเดียวว่าการตั้งค่าด้านบนจะส่งการตอบกลับไปยังเซิร์ฟเวอร์ทุก ๆ 60 วินาทีตราบใดที่เซิร์ฟเวอร์ได้รับการตอบกลับนั้น อย่างไรก็ตามหากมีเหตุผลใดก็ตามที่การตอบสนองไม่ผ่านไปยังเซิร์ฟเวอร์ก็จะลองและส่งข้อความอื่น หากข้อความนั้นล้มเหลวเกินไปก็จะปิดการเชื่อมต่อ (ฉันรู้สึกว่านี่ผิด)

แหล่งที่สองและสามอย่างไรก็ตามพูดสิ่งที่แตกต่าง พวกเขาอ้างว่าข้อความจะถูกส่งไปยังเซิร์ฟเวอร์ทุก ๆ 60 วินาทีหากไม่มีการใช้งานเป็นระยะเวลาหนึ่ง แต่มันจะส่งเพียง 2 คำร้องขอจากนั้นจะปิดการเชื่อมต่อ

ServerAliveCountMax ทำอะไรกันแน่?

คำตอบ:


31

ความรู้สึกของคุณว่า "นี่ผิด" ถูกต้อง ดูหน้าคน :

 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
หน้าคนมีการIntervalตั้งค่าที่ชัดเจนเพื่อ0ปิดการใช้งานมัน แต่มันจะไม่ชัดเจนถ้าคุณตั้งค่าการMax 0มันจะส่ง Ping ไปแบบไม่มีที่สิ้นสุดหรือไม่?
gcb

มันจะไม่ชัดเจนกับผมถ้าตั้งค่า ServerAliveInterval 0 จะให้การเชื่อมต่อเปิดไปเรื่อย ๆ หรือไม่
ฟรานเชส

1
@Francesco ตามค่าเริ่มต้นการเชื่อมต่อจะยังคงเปิดตลอดไปยกเว้นว่าปลายด้านหนึ่งจะปิดอย่างชัดเจน
Michael Hampton

5

ข้อความเซิฟเวอร์ที่มีประโยชน์จะมีประโยชน์เมื่อเซิร์ฟเวอร์ SSH ได้รับการกำหนดค่าให้ปิดการเชื่อมต่อหลังจากช่วงระยะเวลาหนึ่งโดยไม่มีการรับส่งข้อมูล (ผู้ให้บริการเว็บโฮสติ้งที่ใช้ร่วมกันที่ให้การเข้าถึง SSH เกือบทุกครั้ง) การตั้งค่าตัวเลือกทั้งสองนี้จะส่งแพ็คเก็ตทุกServerAliveIntervalวินาทีเป็นเวลาสูงสุดServerAliveCountMaxเพื่อให้เซสชันมีชีวิต

เพื่อตอบความคิดเห็นเกี่ยวกับความไม่แน่นอนของการตั้งค่าตัวเลือกทั้งสอง0ฉันได้อ่านซอร์สโค้ดของการopensshใช้งานและนี่คือสิ่งที่ฉันเห็น ...

  • การตั้งค่าServerAliveIntervalเป็น0จะไม่ส่งแพ็คเก็ต แต่จะทำให้เซสชันยังคงมีอยู่เรื่อย ๆ โดยสมมติว่าการเชื่อมต่อไม่ได้ลดลงเนื่องจากการหมดเวลา TCP และเซิร์ฟเวอร์ไม่ได้กำหนดค่าให้วางไคลเอนต์ที่ไม่ได้ใช้งาน

  • การตั้งค่าServerAliveCountMaxจะ0มีผลเช่นเดียวกับการตั้งค่าไปServerAliveInterval0

  • การตั้งค่าเป็นลบหรืออะไรที่มากกว่าINT_MAX(เช่น 2,147,483,647) จะส่งผลให้เกิดข้อผิดพลาด"ค่าจำนวนเต็ม ... "

  • การตั้งค่าServerAliveCountMaxระหว่าง INT_MAX/1000+1(เช่น 2147484) ไปINT_MAX(เช่น 2147483647) 0นอกจากนี้ยังจะเทียบเท่ากับการกำหนดค่าอย่างใดอย่างหนึ่ง

ดังนั้นในสาระสำคัญการหมดเวลาที่มากที่สุดที่คุณจะได้รับ (ในขณะที่ยังคงส่งแพ็กเก็ต) คือINT_MAX/1000(เช่น 2,147,483) ด้วยการหมดเวลา1และไม่มีการเข้าชมเซสชันเลยคุณจะได้รับเกือบ 25 วัน

เห็นได้ชัดว่าการใช้งานอื่น ๆ ของ SSH อาจมีผลลัพธ์ที่แตกต่างกัน

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.