नीचे लिंक करने पर ऑटोस एसएचएस नहीं मारता है


10

मैंने अपना आटो वॉश शुरू कर दिया है, जो 30 सेकेंड का पोल टाइम है:

AUTOSSH_POLL=30 AUTOSSH_LOGLEVEL=7 autossh -M 0 -f -S none -f -N -L localhost:34567:localhost:6543 user1@server1

और यह ठीक काम कर रहा है:

Sep  5 12:26:44 serverA autossh[20935]: check on child 23084
Sep  5 12:26:44 serverA autossh[20935]: set alarm for 30 secs

लेकिन अगर मैं शारीरिक रूप से नेटवर्क केबल को हटा देता हूं, जिसका अर्थ है कि सुरंग अब काम नहीं कर सकती है, तो ऑटोशश ssh डेमॉन को नहीं मारता है। क्यों? मैं समझता हूं कि यदि लिंक डाउन है तो ऑटोस कुछ नहीं कर सकता है, लेकिन मेरी राय में इसे निम्नलिखित करने की कोशिश करनी चाहिए:

  1. चाइल्ड ssh प्रक्रिया सत्यापित करें ( check on child ...)
  2. दूर-दूर की जाँच करें !!! (सुरंग के माध्यम से एक पिंग जैसा ऑपरेशन)
  3. एहसास है कि सुरंग नीचे है
  4. Ssh प्रक्रिया बंद करो
  5. फिर से सुरंग बनाने की कोशिश करें
  6. एहसास है कि यह काम नहीं करता है, और जल्द ही फिर से जांच करने के लिए एक (तेजी से बढ़ती?) टाइमर सेटअप करें

यही कारण है कि मैं ऑटो चला रहा हूं: यदि सुरंग के लिए कुछ होता है (यह एक सॉफ्टवेयर या हार्डवेयर समस्या है), तो इसे पुनरारंभ करने का प्रयास करना चाहिए। इसके बजाय, वह बस ssh प्रक्रिया के मरने की प्रतीक्षा कर रहा है। क्या इसे पुनः आरंभ करने की कोशिश नहीं की जानी चाहिए, भले ही कनेक्शन को फिर से स्थापित करने की कोई उम्मीद न हो?

ऑटो चेक किस तरह का है? बस सत्यापित करें कि ssh ऊपर और चल रहा है? क्या यह किसी प्रकार की दूरगामी जाँच नहीं है?

संपादित करें

अनुरोध के अनुसार, मैं ssh कॉन्फिग के संबंधित हिस्से को जोड़ता हूं:

# (see http://aaroncrane.co.uk/2008/04/ssh_faster)
# The ServerAliveInterval tells SSH to send a keepalive message every 60 seconds while the connection is open;
#   that both helps poor-quality NAT routers understand that the NAT table entry for your connection should
#   be kept alive, and helps SSH detect when there’s a network problem between the server and client.
ServerAliveInterval 60
# The ServerAliveCountMax says that after 60 consecutive unanswered keepalive messages, the connection should
#   be dropped. At that point, AutoSSH should try to invoke a fresh SSH client. You can tweak those
#   specific values if you want, but they seem to work well for me.
ServerAliveCountMax 60

TCPKeepAlive yes

टाइमआउट को कम करने की कोशिश के बारे में क्या?
निकोलाइडिस फोटिस

हमने थोड़ी देर के लिए ऑटोसॉह का इस्तेमाल किया, लेकिन यह फ्लैकी कनेक्शनों पर बहुत अविश्वसनीय था, विशेष रूप से जब पोर्ट-फ़ॉरवर्डिंग के साथ संयुक्त। अब हम OpenVPN का उपयोग करते हैं और इससे बहुत खुश हैं।
नेल्स टॉड्टमैन

@NikolaidisFotis: टाइमआउट ठीक है। यह है ... टाइमिंग बाहर। लेकिन जब भी समय समाप्त होता है, तो यह सही काम नहीं करता है (imho), अर्थात्: दूर के अंत की पुष्टि करना !
डेंजरसफास्ट

@NilsToedtmann: धन्यवाद, मैं इसे आज़माऊँगा। क्या इसे लागू करना आसान है? क्या आपके पास किसी अच्छे howto का कोई लिंक है?
डेंजरसफास्ट

OpenVPN बहुत सीधा है, हम बस इसे स्थापित करते हैं और सर्वर या क्लाइंट के लिए डिफ़ॉल्ट कॉन्फिग के साथ शुरू करते हैं, क्लाइंट कॉन्फिगर dev tunमें और सेटिंग remoteमें दोनों का उपयोग करते हैं । प्रमाण पत्र का प्रबंधन करने के लिए केवल कष्टप्रद बिट है। हम 'easy-rsa' CA का उपयोग करते हैं जो OpenVPN के साथ आता है। एक बार आपके पास प्रमाणपत्र हो जाने के बाद, शेष आसान होता है।
नेल्स टॉड्टमैन

जवाबों:


11

लेकिन अगर मैं शारीरिक रूप से नेटवर्क केबल को हटा देता हूं, जिसका अर्थ है कि सुरंग अब काम नहीं कर सकती है, तो ऑटोशश ssh डेमॉन को नहीं मारता है। क्यों?

autossh आपके क्लाइंट मशीन पर चलता है, इसलिए यह सीधे सर्वर पर ssh डेमॉन प्रक्रिया को नहीं मार सकता है। हालांकि, अगर आप के लिए एक गैर शून्य मान निर्दिष्ट कर सकते हैं ClientAliveIntervalमें /etc/ssh/sshd_configसर्वर पर (देखें man sshd_config) और config परिवर्तन लागू करने के सर्वर पर sshd सेवा को पुनरारंभ करें। फिर नेटवर्क डिस्कनेक्शन की स्थिति में, ClientAliveInterval * ClientAliveCountMaxसेकंड के बाद ssh डेमॉन प्रक्रिया को मार दिया जाएगा (लेकिन ऑटोशॉट द्वारा नहीं)।

अब, यदि आप पूछना चाहते हैं कि "ssh ग्राहक प्रक्रिया को निरस्त क्यों नहीं करता है?" , आपने निर्दिष्ट किया है -M 0। आटोश मैन पेज से:

Setting the monitor port to 0 turns the monitoring function off, and autossh will only restart ssh upon ssh's exit

कनेक्शन की निगरानी के लिए ऑटोस का उपयोग करने के बजाय, आप ServerAliveCountInterval * ServerAliveCountMaxसेकंड के समय के बाद ssh से बाहर निकलने का इंतजार कर रहे हैं । आपने ssh के बाहर निकलने से पहले 60 सर्वर-जीवित चेक का अनुरोध किया है, जिसमें 60-सेकंड का अंतराल लगातार चेक को अलग करता है, इसलिए आप अपने ssh क्लाइंट के बाहर निकलने से एक घंटे पहले प्रतीक्षा करेंगे।

आप ExitOnForwardFailureक्लाइंट साइड (देखें man ssh_config) पर विकल्प का उपयोग करने पर भी विचार कर सकते हैं , ताकि ssh बाहर निकल जाए यदि यह एक सुरंग स्थापित नहीं कर सकता है, और फिर ऑटोशश फिर से ssh लॉन्च करने का प्रयास कर सकता है।


धन्यवाद, यह समझ में आता है। मेरा वास्तव में "क्लाइंट प्रोसेस" था, सर्वर प्रोसेस नहीं।
खतरों के केंद्र

और ऑटोज़ मैन पेज को फिर से पढ़ने के बाद अब मुझे याद है कि मैं क्यों सेट करता हूं -M 0: मॉनिटरिंग पोर्ट का उपयोग करना आसान नहीं है, और यह अप्रत्यक्ष रूप से हतोत्साहित किया जाता है: कई मायनों में यह मॉनिटरिंग पोर्ट की तुलना में बेहतर समाधान हो सकता है
डेंजरफोन एक्स
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.