จะเกิดอะไรขึ้นถ้าฉันไม่ปิดเซสชัน ssh

ฉันยังใหม่กับ Python ขณะนี้ฉันใช้มันเพื่อเชื่อมต่อกับเซิร์ฟเวอร์ระยะไกลผ่าน ssh ทำบางอย่าง (รวมถึงการคัดลอกไฟล์) จากนั้นปิดเซสชัน

หลังจากแต่ละเซสชัน ฉันจะทำ ssh.close() และ sftp.close() ฉันแค่ทำสิ่งนี้เพราะนั่นเป็นวิธีปกติที่ฉันพบบนอินเทอร์เน็ต

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


person KhaledMaged    schedule 18.05.2016    source แหล่งที่มา


คำตอบ (2)


ระบบปฏิบัติการ (ภายใน) จะปิดการเชื่อมต่อ TCP/IP ที่ค้างอยู่ใดๆ ที่เปิดโดยกระบวนการ เมื่อกระบวนการปิด (แม้ว่าจะเพียงขัดข้องก็ตาม)

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

การปิดเซสชันมีความสำคัญอย่างยิ่ง เมื่อกระบวนการใช้เวลานาน แต่เซสชันนั้นจะถูกใช้งานเพียงไม่นานเท่านั้น

อย่างไรก็ตาม การปิดเซสชันไม่ว่าจะเป็นอะไรก็ตามถือเป็นแนวปฏิบัติที่ดี

person Martin Prikryl    schedule 18.05.2016

เราปิดเซสชันหลังการใช้งาน เพื่อให้การล้างข้อมูล (การปิดกระบวนการที่ทำงานอยู่ทั้งหมดที่เกี่ยวข้อง) เสร็จสิ้น อย่างถูกต้อง/ง่ายดาย

เมื่อคุณ ssh.close() มันจะสร้างสัญญาณ SIGHUP สัญญาณนี้จะฆ่างาน/กระบวนการทั้งหมดภายใต้เทอร์มินัล โดยอัตโนมัติ/ทันที

เมื่อคุณสิ้นสุดเซสชันที่ไม่มี close() ทันที ระบบปฏิบัติการจะรู้ว่าการเชื่อมต่อขาดหาย/ตัดการเชื่อมต่อ และ เริ่มต้นสัญญาณ SIGHUP เดียวกัน ซึ่งจะปิดกระบวนการที่เปิดอยู่ส่วนใหญ่ /กระบวนการย่อย

แม้ว่าจะมีปัญหาที่เป็นไปได้ทั้งหมด เช่น กระบวนการบางส่วนยังคงทำงานต่อไป แม้หลังจาก SIGHUP เนื่องจากกระบวนการ เริ่มต้นด้วยตัวเลือก nohup(หรือได้ถูกยกเลิกการเชื่อมโยงจากเซสชันปัจจุบัน)

person Ani Menon    schedule 18.05.2016