การเชื่อมต่อ SSH ที่ค้างไว้กับ“ การเขียนล้มเหลว: ท่อแตก”


12

ฉันกำลังเชื่อมต่อกับ CentOS 5.5 ผ่าน SSH จากเครื่อง Ubuntu 11.04

การเชื่อมต่อดูเหมือนว่าจะทำงานได้ตามที่คาดไว้เมื่อมีการใช้งาน (เช่นไม่มีความล่าช้าหรือการสูญเสีย) แต่ถ้ามันไม่ได้ใช้งานในขณะที่มันจะหยุดและไม่ตอบสนอง ในที่สุดข้อความแสดงข้อผิดพลาด "การเขียนล้มเหลว: ท่อที่เสียหาย" จะถูกส่งคืนและฉันจะกลับมาที่พรอมต์ของเครื่องท้องถิ่น

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

คำตอบ:


15

ดูเหมือนว่าการกำหนดค่า SSHD ของกล่อง CentOS จะไม่ได้ตั้งค่าให้ลูกค้า KeepAlive

วางสองบรรทัดนี้ใน CentOS sshd config ของคุณ (/ etc / ssh / sshd_config) รีสตาร์ทและสนุก!

KeepAlive yes
ClientAliveInterval 60

ในขณะที่คุณอยู่ที่นี่ฉันแนะนำให้ใช้ gnu screenเพื่อให้เซสชันของคุณยังมีชีวิตอยู่บนฝั่ง CentOS


1
KeepAlive ตามที่ถูกเปลี่ยนชื่อเป็น TCPKeepAlive และสามารถทิ้งไว้ที่ค่าเริ่มต้นซึ่งก็คือใช่ ClientAliveInterval ควรเพียงพอ man sshd_configดู
ypid

9

คำตอบที่แท้จริงคือเกือบทุกครั้งที่คุณมีอุปกรณ์ NAT บางอย่างในพา ธ ซึ่งมักจะเป็นไฟร์วอลล์ซึ่งตารางของรัฐมีไทม์เอาต์ที่ค่อนข้างก้าวร้าว เนื่องจากคุณไม่ได้ใช้งานการเชื่อมต่อ ssh เป็นระยะเวลาหนึ่งอุปกรณ์ NAT จะ "ลืม" การแมประหว่างที่อยู่ภายในและหมายเลขพอร์ตต้นทางของคุณ

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

การแก้ไขในทางปฏิบัติสำหรับสิ่งนี้คือการทำสิ่งที่ yuriismaster แนะนำ: เปิดใช้งาน KeepAlives (ซึ่งทำให้แน่ใจว่าทราฟฟิกปกติไปที่ "จี้" รายการตารางของรัฐ) และใช้screenทางด้านระยะไกล (เพื่อรักษาสถานะในเหตุการณ์ ฉันโพสต์คำตอบนี้เพียงเพราะคุณถามว่าเกิดอะไรขึ้นเช่นเดียวกับสิ่งที่ต้องทำเกี่ยวกับมัน หวังว่านี่จะอธิบายได้อย่างชัดเจนว่าเหตุใดคำแนะนำของ yuriismaster จึงเป็นสิ่งที่ดี


นั่นทำให้รู้สึกที่สมบูรณ์แบบ! เรามี NAT พร้อมการตั้งค่า DMZ สำหรับช่องนี้ ฉันจะลองตั้งค่าการหมดเวลาและดูว่าเหมาะกับฉันหรือไม่ ขอบคุณ :)
Stephen RC

ฉันยอมรับคุณในขณะที่คุณช่วยให้ฉันเข้าใจเหตุผลที่อยู่เบื้องหลังปัญหา แต่เครดิตต้องไปที่ @yuriismaster เพื่อแก้ไข
Stephen RC

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