ข้อความ Broken pipe หมายถึงอะไรในเซสชัน SSH


103

บางครั้งเซสชัน SSH ของฉันยกเลิกการเชื่อมต่อด้วยWrite failed: Broken pipeข้อความ มันหมายความว่าอะไร? และฉันจะเปิดเซสชันของฉันได้อย่างไร

ฉันรู้screenแต่นั่นไม่ใช่คำตอบที่ฉันต้องการ ฉันคิดว่านี่เป็นsshdตัวเลือกการกำหนดค่า

คำตอบ:


89

อาจเป็นไปได้ว่าเซิร์ฟเวอร์ของคุณปิดการเชื่อมต่อที่ไม่ได้ใช้งานนานเกินไป คุณสามารถอัปเดตลูกค้าของคุณ ( ServerAliveInterval) หรือเซิร์ฟเวอร์ของคุณ ( ClientAliveInterval)

 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.

 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.

เพื่ออัปเดตเซิร์ฟเวอร์ของคุณ (และรีสตาร์ทของคุณsshd)

echo "ClientAliveInterval 60" | sudo tee -a /etc/ssh/sshd_config

หรือฝั่งไคลเอ็นต์:

echo "ServerAliveInterval 60" >> ~/.ssh/config 

NB ที่บางครั้ง "* AliveInterval" ไม่เพียงพอstackoverflow.com/questions/10665267/…
rogerdpack

1
ไม่มี~/.ssh/configใน Mac ของฉันฉันต้องสร้างมันขึ้นมาหรือไม่หรือที่อื่น?
AGamePlayer

5
@AwQiruiGuo ใช่คุณควรสร้างไดเรกทอรี ( ~/.ssh) ก่อน ดังนั้นmkdir -p ~/.ssh; chmod 700 ~/.ssh; touch ~/.ssh/config
Gert

6

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

การติดตั้งและการตั้งค่านั้นง่ายมาก: ตอนนี้มันรวมอยู่ในลีนุกซ์ปัจจุบันทั้งหมด (รวมถึงการกระจายที่ไม่ใช่ลินุกซ์) และประสานการเริ่มต้นเซสชันและการพิสูจน์ตัวตนผ่านการเชื่อมต่อ ssh ก่อนหน้า ดังนั้นหากคุณสามารถเชื่อมต่อผ่านssh user@serverคุณมีโอกาสมากที่จะสามารถเชื่อมต่อกับ mosh ได้เพียงแค่โทรmosh user@serverถ้าแพ็คเกจ mosh ติดตั้งที่ปลายทั้งสอง

สาเหตุหลักของความล้มเหลวในการเชื่อมต่อคือคุณต้องไปถึงเซิร์ฟเวอร์บนพอร์ต UDP (ช่วงเริ่มต้น: 60000-61000) เพื่อให้ mosh ทำงาน ดังนั้นถ้าเซิร์ฟเวอร์ที่อยู่หลังไฟร์วอลล์คุณเป็นส่วนใหญ่ออกจากโชคหากไม่สามารถเจาะหลุมในมันเอง ( ผลกระทบการรักษาความปลอดภัย )


3

หากคุณต้องการมีระยะเวลาเชื่อมต่อที่นานขึ้นในไคลเอนต์ให้เพิ่ม:

echo 'ServerAliveInterval 30' | sudo tee -a ~/.ssh/config
echo 'ServerAliveCountMax 1200' | sudo tee -a ~/.ssh/config

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


5
เหตุใดจึงต้องใช้ sudo สำหรับไฟล์ที่เป็นของผู้ใช้ปัจจุบันหรือยังไม่มี?
Hubert Grzeskowiak

2

มักจะหมายความว่าการเชื่อมต่อเครือข่าย (TCP) ของคุณถูกรีเซ็ต เช่นผู้ให้บริการอินเทอร์เน็ตของคุณเชื่อมต่อคุณหรืออะไรทำนองนี้


1

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

ฉันใช้ Debian ดังนั้นนี่คือตัวอย่างของคำสั่งที่ฉันใช้เพื่อตรวจสอบว่าเซิร์ฟเวอร์อื่นใช้ IP address เดียวกันหรือไม่

apt-get install arp-scan
arp-scan -I eth0 -l | grep 192.168.1.42
  192.168.1.42 d4:eb:9a:f2:11:a1 (Unknown)
  192.168.1.42 f4:23:a4:38:b5:76 (Unknown) (DUP: 2)

คุณจะสังเกตเห็นที่อยู่ Mac สองชุดโดยใช้ที่อยู่ IP เดียวกัน หลีกเลี่ยงความขัดแย้งด้วยการตั้งค่าหนึ่งไปยังที่อยู่ IP อื่น


0

สาเหตุอีกประการหนึ่งสำหรับข้อความ "Broken Pipe" คือเครื่องอื่นพยายามใช้ IP เดียวกันกับโฮสต์ของคุณ

วิธีง่ายๆในการทดสอบว่ามีบุคคลอื่นกำลังใช้ IP นั้นหรือไม่:

  1. ปิดโฮสต์ของคุณ
  2. ping IP เดียวกันเพื่อดูว่าเครื่องอื่นกำลังใช้ IP นั้นหรือไม่

เพื่อหาที่เครื่องอยู่ในเครือข่ายของคุณคุณสามารถใช้ Unix และ Linux ชื่อคำถามนี้: วิธีการหาสิ่งที่เครื่องอื่น ๆ ที่เชื่อมต่อกับเครือข่ายท้องถิ่น

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