บางครั้งเซสชัน SSH ของฉันยกเลิกการเชื่อมต่อด้วยWrite failed: Broken pipe
ข้อความ มันหมายความว่าอะไร? และฉันจะเปิดเซสชันของฉันได้อย่างไร
ฉันรู้screen
แต่นั่นไม่ใช่คำตอบที่ฉันต้องการ ฉันคิดว่านี่เป็นsshd
ตัวเลือกการกำหนดค่า
บางครั้งเซสชัน SSH ของฉันยกเลิกการเชื่อมต่อด้วยWrite failed: Broken pipe
ข้อความ มันหมายความว่าอะไร? และฉันจะเปิดเซสชันของฉันได้อย่างไร
ฉันรู้screen
แต่นั่นไม่ใช่คำตอบที่ฉันต้องการ ฉันคิดว่านี่เป็นsshd
ตัวเลือกการกำหนดค่า
คำตอบ:
อาจเป็นไปได้ว่าเซิร์ฟเวอร์ของคุณปิดการเชื่อมต่อที่ไม่ได้ใช้งานนานเกินไป คุณสามารถอัปเดตลูกค้าของคุณ ( 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
~/.ssh/config
ใน Mac ของฉันฉันต้องสร้างมันขึ้นมาหรือไม่หรือที่อื่น?
~/.ssh
) ก่อน ดังนั้นmkdir -p ~/.ssh; chmod 700 ~/.ssh; touch ~/.ssh/config
วิธีการแก้ปัญหาทางเลือกที่จะใช้mosh
- เปลือกโทรศัพท์มือถือ ตรงกันข้ามกับ ssh มันเชื่อมต่อผ่าน UDP และรองรับการโรมมิ่ง คุณสามารถเริ่มเซสชันของคุณที่บ้านระงับแล็ปท็อปของคุณนำไปทำงาน / เพื่อน / ที่ไหนก็ได้ที่คุณมีอินเทอร์เน็ตยกเลิกแล็ปท็อปของคุณและทำงานต่อไปราวกับว่าไม่มีอะไรเกิดขึ้น มีประโยชน์อย่างยิ่งหากคุณใช้การเชื่อมต่ออินเทอร์เน็ตที่มีหมัด: มันแสดงความคิดเห็นทันทีหากการกดแป้นของคุณไม่ถึงเซิร์ฟเวอร์และพยายามทำการเชื่อมต่อใหม่อีกครั้งอย่างต่อเนื่อง
การติดตั้งและการตั้งค่านั้นง่ายมาก: ตอนนี้มันรวมอยู่ในลีนุกซ์ปัจจุบันทั้งหมด (รวมถึงการกระจายที่ไม่ใช่ลินุกซ์) และประสานการเริ่มต้นเซสชันและการพิสูจน์ตัวตนผ่านการเชื่อมต่อ ssh ก่อนหน้า ดังนั้นหากคุณสามารถเชื่อมต่อผ่านssh user@server
คุณมีโอกาสมากที่จะสามารถเชื่อมต่อกับ mosh ได้เพียงแค่โทรmosh user@server
ถ้าแพ็คเกจ mosh ติดตั้งที่ปลายทั้งสอง
สาเหตุหลักของความล้มเหลวในการเชื่อมต่อคือคุณต้องไปถึงเซิร์ฟเวอร์บนพอร์ต UDP (ช่วงเริ่มต้น: 60000-61000) เพื่อให้ mosh ทำงาน ดังนั้นถ้าเซิร์ฟเวอร์ที่อยู่หลังไฟร์วอลล์คุณเป็นส่วนใหญ่ออกจากโชคหากไม่สามารถเจาะหลุมในมันเอง ( ผลกระทบการรักษาความปลอดภัย )
หากคุณต้องการมีระยะเวลาเชื่อมต่อที่นานขึ้นในไคลเอนต์ให้เพิ่ม:
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 ชั่วโมง)
มักจะหมายความว่าการเชื่อมต่อเครือข่าย (TCP) ของคุณถูกรีเซ็ต เช่นผู้ให้บริการอินเทอร์เน็ตของคุณเชื่อมต่อคุณหรืออะไรทำนองนี้
ฉันมีปัญหาเดียวกัน แต่ไม่เป็นไปตามที่คาดไว้ หากคุณพบว่าในเครือข่ายเดียวกันเซิร์ฟเวอร์อื่นพยายามใช้ที่อยู่ 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 อื่น
สาเหตุอีกประการหนึ่งสำหรับข้อความ "Broken Pipe" คือเครื่องอื่นพยายามใช้ IP เดียวกันกับโฮสต์ของคุณ
วิธีง่ายๆในการทดสอบว่ามีบุคคลอื่นกำลังใช้ IP นั้นหรือไม่:
เพื่อหาที่เครื่องอยู่ในเครือข่ายของคุณคุณสามารถใช้ Unix และ Linux ชื่อคำถามนี้: วิธีการหาสิ่งที่เครื่องอื่น ๆ ที่เชื่อมต่อกับเครือข่ายท้องถิ่น