การเมานต์ SSHFS ที่รอดจากการปลด


56

ฉันใช้SSHFS mounts จากแล็ปท็อปของฉันไปยังเซิร์ฟเวอร์กลาง

เห็นได้ชัดว่าการเมานต์ SSHFS นั้นขาดหลังจากการยกเลิกการเชื่อมต่อที่ยาวนานขึ้น (เช่นระหว่างการหยุดทำงานชั่วคราว) ทำให้การเชื่อมต่อ SSH พื้นฐานนั้นหมดเวลา

มีวิธีใดที่จะทำให้ SSHFS mounts มีชีวิตรอดจากการยกเลิกการเชื่อมต่อที่ยาวนาน (> 5 นาที) หรือแม้กระทั่งโทรซ้ำด้วย IP ที่ต่างกันหรือไม่

คำตอบ:


62

ใช้ -o reconnect,ServerAliveInterval=15,ServerAliveCountMax=3

การรวมกันServerAliveInterval=15,ServerAliveCountMax=3ทำให้เกิดข้อผิดพลาด I / O ที่จะปรากฏขึ้นหลังจากหนึ่งนาทีของการขาดหายไปของเครือข่าย สิ่งนี้สำคัญ แต่ไม่มีเอกสารส่วนใหญ่ หากServerAliveIntervalตัวเลือกถูกปล่อยไว้ที่ค่าเริ่มต้น (ดังนั้นโดยไม่มีการตรวจสอบมีชีวิตอยู่) กระบวนการที่พบว่า I / O แฮงค์จะเข้าสู่โหมดสลีปไปเรื่อย ๆ แม้หลังจากที่ sshfs ได้รับreconnect'ed ฉันคิดว่านี่เป็นพฤติกรรมที่ไร้ประโยชน์

กล่าวอีกนัยหนึ่งสิ่งที่เกิดขึ้น-o reconnectโดยไม่มีการกำหนดServerAliveIntervalว่า I / O ใด ๆ จะสำเร็จหรือแขวนแอปพลิเคชันไปเรื่อย ๆ หาก ssh เชื่อมต่อใหม่ภายใต้ แอปพลิเคชันทั่วไปจะกลายเป็นผลแขวนทั้งหมด หากคุณต้องการอนุญาตให้ I / O ส่งคืนข้อผิดพลาดและกลับมาใช้งานแอปพลิเคชันต่อไปคุณต้องการServerAliveInterval=1หรือมากกว่า

นี่ServerAliveCountMax=3เป็นค่าเริ่มต้นอยู่แล้ว แต่ฉันต้องการระบุว่าสามารถอ่านได้


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

ฉันไม่ได้อ่านเอกสาร แต่ฉันเห็นวิธีแก้ไขปัญหาอื่นบอกว่า "ServerAliveCountMax = 0" หมายความว่ามันจะพยายามอย่างต่อเนื่อง ฉันถือว่าโซลูชันของคุณให้ลองอีกครั้ง 3 ครั้งหลังจากความล้มเหลวแต่ละครั้งหรือไม่
PJ Brunet

@PJBrunet man 5 ssh_configสำหรับรายละเอียดเพิ่มเติม แต่ส่วนสำคัญคือทุก ๆ 15 วินาที ssh จะส่งอะไรบางอย่างเช่น 'Keep-alive' ping ทุก ๆ 15 วินาทีเพื่อให้แน่ใจว่าคอมพิวเตอร์ยังคงตอบสนองซึ่งกันและกัน หากการส่ง Ping สามครั้งล้มเหลว (45 วินาที) ให้เชื่อมต่อใหม่
Wyatt8740

@ Wyatt8740 ฉันศึกษาเพิ่มเติมและอ่านเอกสารฉันเชื่อว่าServerAliveCountMax=3มีความหมายที่แตกต่างกัน หากมีความล้มเหลวก็จะลองเชื่อมต่ออีก 3 ครั้งแล้วให้ขึ้น ในบางจุดการลองใช้ใหม่นั้นไม่ได้ผล แต่ขึ้นอยู่กับแอปพลิเคชัน จากนั้นอีกครั้งฉันคิดว่าหน้าคนอาจมีความเฉพาะเจาะจงมากขึ้นมีวิธีที่แตกต่างกันในการตีความวิธีการใช้ IMO FWIW ปัญหาเฉพาะของฉันหายไปหลังจากเปลี่ยนเป็น ProtonVPN ฉันคิดว่ามันก็คุ้มค่าที่จะตรวจสอบการกำหนดค่า ssh บนไคลเอนต์และเซิร์ฟเวอร์พวกเขามีตัวเลือกแยกต่างหากดังนั้นสิ่งที่คุณต้องการจริงๆคือ-o reconnect
PJ Brunet

1
นี่ควรเป็นคำตอบที่ยอมรับได้
Fl0v0

52

ขอบคุณสำหรับเคล็ดลับของ autossh และ autofs

อย่างไรก็ตามเพื่อจุดประสงค์โดยตรงของฉันฉันพบวิธีแก้ปัญหาที่ง่ายกว่ามากซึ่งไม่ได้บันทึกไว้อย่างดี:

sshfs -o reconnect server:/path/to/mount

หวาน! สิ่งนี้ทำให้ฉันต้องการเรียงลำดับการรับรองความถูกต้องในการเขียนจริง: serverfault.com/q/379728/96905
Jeff Burdges

12

Autosshเชื่อมต่อเซสชัน ssh ใหม่โดยอัตโนมัติเมื่อพบว่า ssh เสียชีวิตหรือหยุดการรับส่งข้อมูล เนื่องจากมันเป็นเพียง ssh อัตโนมัติมันจะทำงานจาก IP ที่แตกต่างกันและจากการหยุดชั่วคราว (แม้ว่าแล็ปท็อปจะตื่นขึ้นมาบน LAN อื่น)


บางทีMoshนั้นดีกว่าสำหรับเซสชัน SSH เชิงโต้ตอบ
Martin Ueding

@MartinUeding ฉันค้นหา Mosh แต่) ไม่ทำงานกับ sshfs b) ดูเหมือนว่าคุณจำเป็นต้องติดตั้งบนเซิร์ฟเวอร์ด้วยซึ่งทำให้ IMO น่าสนใจน้อยลง
PJ Brunet

9

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

นี่เป็นวิธีการ toผมพบว่าใน google เพื่อให้บรรลุนี้มีที่อื่น ๆ อีกหลาย


2

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

ฉันคิดว่าเทคนิคที่ดีกว่าคือยกเลิกการต่อเชื่อมระบบไฟล์ก่อนที่จะระงับคอมพิวเตอร์ของคุณและทำการเมานต์ใหม่เมื่อคอมพิวเตอร์กลับมาทำงานอีกครั้ง กลไกในการทำเช่นนั้นอาจขึ้นอยู่กับวิธีที่คุณพักคอมพิวเตอร์ - ฉันใช้เคอร์เนล tuxonice และทำสิ่งนี้ฉันมีคำสั่งเช่น

Unmount /mnt/sshfs

ใน/etc/hibernate/common.conf.


0

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

#!/bin/bash
echo PWD | sshfs USER@SERVER:/ MOUNT_PATH -o password_stdin,reconnect,ServerAliveInterval=15,ServerAliveCountMax=3 -p PORT -C -oStrictHostKeyChecking=no
if xhost >& /dev/null ; then
    pcmanfm MOUNT_PATH
fi
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.