SSHFS माउंट जो डिस्कनेक्ट से बच जाता है


56

मैं अपने लैपटॉप से ​​एक केंद्रीय सर्वर में SSHFS माउंट का उपयोग कर रहा हूं ।

जाहिर है, SSHFS माउंट लंबी डिस्कनेक्ट के बाद टूट जाता है (उदाहरण के लिए, निलंबन के दौरान), अंतर्निहित SSH कनेक्शन का कारण बनता है।

क्या SSHFS माउंट प्राप्त करने का एक तरीका है लंबे समय तक चलने वाले डिस्कनेक्ट (> 5 मिनट) या यहां तक ​​कि एक अलग आईपी के साथ फिर से डायलिन?

जवाबों:


62

उपयोग -o reconnect,ServerAliveInterval=15,ServerAliveCountMax=3

संयोजन ServerAliveInterval=15,ServerAliveCountMax=3I / O त्रुटियों को नेटवर्क आउटेज के एक मिनट बाद पॉप आउट करने का कारण बनता है। यह महत्वपूर्ण है लेकिन काफी हद तक अनिर्दिष्ट है। यदि ServerAliveIntervalविकल्प डिफ़ॉल्ट पर छोड़ दिया जाता है (तो जीवित जाँच के बिना), तो I / O हैंग का अनुभव करने वाली प्रक्रियाएँ अनिश्चित समय तक सोती रहती हैं, भले ही sshfs reconnectके एड होने के बाद भी । मैं इसे एक बेकार व्यवहार मानता हूं।

दूसरे शब्दों में, -o reconnectअसाइन किए बिना क्या होता ServerAliveIntervalहै कि कोई भी I / O या तो सफल होगा, या एप्लिकेशन को अनिश्चित काल के लिए लटका देगा यदि ssh नीचे से फिर से जुड़ता है। परिणामस्वरूप एक विशिष्ट एप्लिकेशन पूरी तरह से लटका हुआ हो जाता है। यदि आप I / O को एक त्रुटि वापस करने और आवेदन को फिर से शुरू करने की अनुमति देना चाहते हैं, तो आपको जरूरत है ServerAliveInterval=1या अधिक से अधिक।

ServerAliveCountMax=3डिफ़ॉल्ट वैसे भी है, लेकिन मैं पठनीयता के लिए यह निर्दिष्ट करने के लिए पसंद करते हैं।


इसने मेरे लिए इसे बनाया। इसके अलावा, आप एक छोटे अंतराल का उपयोग कर सकते हैं, यह बहुत परेशानी का कारण नहीं होना चाहिए और पूरी बात को और अधिक उत्तरदायी बनाता है।
मानक्स

मैंने डॉक्स नहीं पढ़ा, लेकिन मैंने एक और समाधान यह कहते देखा "ServerAliveCountMax = 0" का अर्थ है कि यह अनिश्चित काल तक प्रयास करता रहेगा। मुझे लगता है कि आपके समाधान यह प्रत्येक विफलता के बाद 3 रिट्रीट देता है?
पीजे ब्रुनेट

man 5 ssh_configअधिक विवरण के लिए @PJBrunet , लेकिन यह है कि हर 15 सेकंड ssh एक ' कीप -जिंदा' की तरह कुछ भेज देगा, यह सुनिश्चित करने के लिए हर 15 सेकंड में पिंग होगा कि कंप्यूटर अभी भी एक-दूसरे को जवाब दे रहे हैं। यदि लगातार तीन पिंग विफल (45 सेकंड), फिर से कनेक्ट करें।
व्याट8740

@ Wyatt8740 मैंने इसे और अधिक पढ़ा और दस्तावेज़ीकरण पढ़ा, मेरा मानना ServerAliveCountMax=3है कि इसका एक अलग अर्थ है। यदि कोई विफलता है, तो यह 3 बार और फिर से जोड़ने का प्रयास करेगा। कुछ बिंदु पर पुन: प्रयास करना निरर्थक है, लेकिन यह अनुप्रयोग पर निर्भर करता है। फिर से, मुझे लगता है कि मैन पेज अधिक विशिष्ट हो सकता है, आईएमओ शब्द कहने के तरीके की व्याख्या करने के लिए अलग-अलग तरीके हैं। प्रोटॉन वीपीएन पर स्विच करने के बाद एफडब्ल्यूआईडब्ल्यू मेरी विशिष्ट समस्या दूर हो गई। मुझे लगता है कि यह क्लाइंट और सर्वर पर ssh कॉन्फ़िगरेशन की जांच करने के लिए भी लायक है, उनके पास अलग-अलग विकल्प हैं, इसलिए आपको वास्तव में ज़रूरत है-o reconnect
PJ Brunet

1
यह स्वीकृत उत्तर होना चाहिए।
Fl0v0

52

ऑटोस और ऑटोफ की युक्तियों के लिए धन्यवाद।

हालाँकि, अपने प्रत्यक्ष उद्देश्य के लिए मुझे एक बहुत ही सरल समाधान मिला, जिसे इतनी अच्छी तरह से प्रलेखित नहीं किया गया था:

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

मिठाई! यह मुझे वास्तव में प्रमाणित-ऑन-राइट लिखना चाहता है: serverfault.com/q/379728/96905
Jeff Burdges

12

ऑटोसॉश स्वचालित रूप से ssh सत्रों को फिर से जोड़ देता है जब यह नोटिस ssh मर गया है या ट्रैफ़िक को रोकना बंद कर दिया है। चूंकि यह सिर्फ स्वचालित ssh है, यह अलग-अलग IP से और सस्पेंड से (भले ही लैपटॉप अलग-अलग लैश पर उठता हो) काम करेगा।


शायद Mosh एक इंटरैक्टिव SSH सत्र के लिए भी बेहतर है।
मार्टिन यूडिंग

@MartinUeding मैंने मोश देखा लेकिन a) sshfs के साथ काम नहीं करता है b) ऐसा प्रतीत होता है कि आपको इसे सर्वर पर भी इंस्टॉल करने की आवश्यकता है, जो इसे कम आकर्षक बनाता है, IMO।
पीजे ब्रुनेट

9

एक चीज जो आप कर सकते हैं वह है अपने फाइल सिस्टम को ऑटोफोंस के जरिए माउंट करना । ऑटोफ़्स एक उपकरण है जो एक फाइल सिस्टम को माउंट करेगा जब आप निर्देशिका में कुछ का उपयोग करने के लिए जिसे फाइल सिस्टम माउंट किया जाएगा। जब यह गतिविधि का पता लगाता है तो फाइलसिस्टम आरोहित होता है। जब फाइलसिस्टम पर कुछ भी नहीं हो रहा है तो क्या यह अनमाउंट है।

यहाँ इसे पूरा करने के लिए एक हाउटो पाया गया है, जहाँ कई अन्य हैं।


2

मुझे संदेह नहीं है, क्योंकि यदि आप कनेक्शन को छोड़ने के लिए अपने एसएसएच क्लाइंट को कॉन्फ़िगर नहीं कर सकते हैं, तो भी, निष्क्रियता की एक निर्दिष्ट अवधि के बाद ऐसा करने के लिए सर्वर को कॉन्फ़िगर किया जा सकता है, और आप इसे ओवरराइड नहीं कर पाएंगे। यहां तक ​​कि अगर आप कनेक्शन को फिर से शुरू कर सकते हैं, तो सर्वर को लटका दिया जाएगा, और समय के साथ सर्वर संसाधनों का एक महत्वपूर्ण अपशिष्ट हो सकता है।

एक बेहतर तकनीक, मुझे लगता है, अपने कंप्यूटर को निलंबित करने से पहले फाइल सिस्टम को अनमाउंट करना और कंप्यूटर के फिर से जागने पर इसे रिमूव करना है। ऐसा करने का तंत्र इस बात पर निर्भर करता है कि आप अपने कंप्यूटर को कैसे निलंबित करते हैं - मैं tuxonice कर्नेल का उपयोग करता हूं और इस तरह से कुछ करने के लिए मेरे पास एक निर्देश है

Unmount /mnt/sshfs

में है /etc/hibernate/common.conf


0

Kubanczyk का जवाब बहुत अच्छा है। मुझे बहुत ही लालची sshfs की वजह से पूरे इंटरफ़ेस को फ्रीज़ करने में समस्या थी, अब एक स्क्रिप्ट द्वारा शुरू किए गए आसान कनेक्शन के लिए जो लैपटॉप को खोलने पर फिर से जुड़ता है और जब कनेक्शन धीमा हो जाता है तो फ्रीज़ नहीं होता है, आप इसके बाद एक bash स्क्रिप्ट का उपयोग कर सकते हैं (शायद बहुत सुरक्षित नहीं है, लेकिन उदाहरण के लिए कई वेब परियोजनाओं के लिए सुविधाजनक है):

#!/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
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.