การเชื่อมต่อ SSH อยู่รอดได้อย่างไรเมื่อเครือข่ายรีสตาร์ท?


63

จาก Linux SSH shell ให้พิมพ์/etc/init.d/network restartเพื่อเริ่มบริการเครือข่ายใหม่

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

คำตอบ:


69

ทำได้โดยไม่ทำอะไรเป็นพิเศษ เครือข่ายรีสตาร์ทในเวลาที่น้อยกว่าการเชื่อมต่อ TCP จะหมดเวลาดังนั้นการเชื่อมต่อ TCP จะอยู่รอด "ดับ" ในลักษณะเดียวกับที่มันจะรอดจากการหยุดทำงานของเครือข่ายชั่วคราวใด ๆ

เหตุผลเดียวที่ Windows ไม่ได้ทำแบบเดียวกันคือเพราะ Windows รีเซ็ตการเชื่อมต่อ TCP โดยเฉพาะเมื่อส่วนต่อประสานเครือข่ายหยุดทำงาน นี่เป็นสิ่งที่น่าสนใจอย่างยิ่งเนื่องจาก TCP ได้รับการออกแบบมาเป็นพิเศษเพื่อให้สามารถใช้งานกับเครือข่ายที่หยุดทำงานชั่วคราวได้


1
เดวิดนั่นหมายความว่าสแต็ค TCP / IP ไม่รีสตาร์ทใช่ไหม เพราะถ้าเป็นเช่นนั้นเซิร์ฟเวอร์จะสูญเสียการติดตามซ็อกเก็ต SSH และกระบวนการลูก sshd (ขอบคุณนิลส์) จะยุติลง ข้อใดทำให้คำถามถัดไป: บริการใดจัดการซ็อกเก็ต TIA
Serge Wautier

@David Schwartz - ฉันสามารถใช้พารามิเตอร์อะไรในการเปลี่ยนการหมดเวลา ฉันจะหาค่าการหมดเวลาปัจจุบันได้อย่างไร และมันถูกกำหนดค่าในฝั่งเซิร์ฟเวอร์หรือฝั่งไคลเอ็นต์?
Martin Vegter

@MartinVegter คุณไม่ต้องการเปลี่ยนพารามิเตอร์การกำหนดเวลาการเชื่อมต่อ TCP เพราะพวกเขาต้องประสานงานกับทั้งสองฝ่าย คุณควรออกแบบระบบโดยรวมให้ดีขึ้นเพื่อทนต่อการสูญเสียการเชื่อมต่อ TCP ได้อย่างราบรื่นโดยการกู้คืนการเชื่อมต่อ
David Schwartz

11

SSHD ส้อมกระบวนการลูกในการเชื่อมต่อ กระบวนการลูกนี้จะไม่ตายถ้าทั้ง SSHD หรือเครือข่ายทั้งหมดจะเริ่มต้นใหม่ นี่คือเหตุผลที่คุณสามารถอัปเดต ssh และ / หรือการกำหนดค่าทำservice sshd restartและยังคงเชื่อมต่อกับ ssh-session เก่าของคุณด้วยการตั้งค่าเก่า นอกเหนือจาก ssh ที่กู้คืนได้ดีจากการขาดเครือข่ายขนาดเล็ก


2
SSH ไม่รู้ด้วยซ้ำว่า 'เครือข่ายขนาดเล็กขาดหาย' ด้วยเหตุผลที่ David Schwartz มอบให้ ไม่ใช่ทรัพย์สินของ SSH โดยเฉพาะ
user207421

ฉันไม่แน่ใจว่าหากยังไม่มีการเขียนโปรแกรมเล็กน้อยที่เกี่ยวข้องกับ ssh-side โดยทั่วไปบริการ TCP ทั้งหมดควรมีความผิดปกติ แต่ส่วนมากจะไม่รองรับ ต้องมีกลไกการลองใหม่เพิ่มเติมที่เกี่ยวข้องในแอปพลิเคชัน - จากนั้นบริการยังสามารถอยู่รอดได้ "กลาง" ขัดข้องเช่นกัน
Nils

3
ตามที่อธิบายโดย EJP คำตอบของคุณเป็นจริง แต่ไม่เกี่ยวข้อง
Gilles

3
คำตอบนี้มีประโยชน์สำหรับฉันเพราะมันเพิ่มความเข้าใจเกี่ยวกับสิ่งที่sshdจะหลีกเลี่ยงการลงservice sshd restartไป หากคุณอัปเดตsshd( อัปเดตความปลอดภัย ฯลฯ ) กระบวนการลูกจะยังคงทำงานบนรหัสเดิม (อัปเดตล่วงหน้า) แต่จะให้บริการต่อไปแทนที่จะถูกขัดจังหวะ ฉันเดาว่าความพร้อมใช้งานของซ็อกเก็ตการฟังสำหรับsshdกระบวนการหลักนั้นถูกขัดจังหวะอย่างสั้น ๆ แต่เมื่อกระบวนการลูกแรกสิ้นสุดลง
allquixotic

1
@ ไม่มีฉันรู้ว่าคุณเขียนว่า แต่สิ่งนี้ทำให้ผู้อ่านโดยเฉลี่ยคิดว่าการฟอร์กมีความเกี่ยวข้อง แต่สิ่งเดียวกันก็เกิดขึ้นกับโปรแกรมที่ไม่แยก คำตอบของคุณเป็นเหมือน: "เนื่องจากเหล็กแข็งแกร่งกว่าเหล็กแอปเปิ้ลเป็นสีแดง"
Daniel Alder
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.