วิธีการปล่อยพอร์ตบนเซิร์ฟเวอร์ SSH เมื่อ reverse ssh tunnel ยกเลิกการเชื่อมต่ออย่างฉับพลัน / ไม่สะอาด?


19

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

ทุกอย่างทำงานได้ดีจนกว่าจะมีการยกเลิกการเชื่อมต่อของเซสชัน SSH

เมื่อเกิดเหตุการณ์นี้ขึ้นบนเซิร์ฟเวอร์ SSH ของเราพอร์ตที่ใช้โดยอุโมงค์ย้อนกลับยังคงติดอยู่ในโหมดการรับฟังและในที่สุดเมื่อฮาร์ดแวร์ระยะไกลของเราพยายามเชื่อมต่ออีกครั้งโดยอัตโนมัติและสร้างอุโมงค์ใหม่อีกครั้ง

คำเตือน: การส่งต่อพอร์ตระยะไกลล้มเหลวสำหรับการฟังพอร์ต XXXX

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

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

เป็นผู้ใหญ่มากฉันแน่ใจว่า SSHD มีคุณสมบัติในตัวเพื่อจัดการเรื่องนี้ แต่ฉันก็ไม่สามารถเข้าใจได้

กรุณาแนะนำดังนั้นฉันไม่ต้องกลับไปที่การจัดการกล่อง Windows ...

FYI: ฉันกำลังเรียกใช้สิ่งนี้จาก Distbian ที่เป็น Debian

คำตอบ:


18

คุณต้องใช้ในของคุณClientAliveIntervalsshd_config

ClientAliveInterval 15

Ref: man sshd_config

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

         The default value is 3.  If ClientAliveInterval (see below) is
         set to 15, and ClientAliveCountMax is left at the default,
         unresponsive SSH clients will be disconnected after approximately
         45 seconds.  This option applies to protocol version 2 only.

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

ขอบคุณมาก ฉันจะดูการตั้งค่านั้นบนเซิร์ฟเวอร์ของเรา
TCZ

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