बूट पर एक स्वचालित रिवर्स SSH कनेक्शन बना रहा है


9

मेरे पास एक NAT के पीछे एक पीसी है जो मेरे Digitalocean VPC के लिए रिवर्स SSH कनेक्शन बनाता है। मैं अपने ऑफिस पीसी (मैं ऐसा करने के लिए अधिकृत हूं) और फ़ाइलों की प्रतिलिपि बनाने और अन्य महत्वपूर्ण काम करने के लिए घर से इस उल्टे एसएसएच कनेक्शन का उपयोग करता हूं।

हालांकि अक्सर नहीं, मैंने देखा कि मेरा कार्यालय पीसी फिर से शुरू होता है (बिजली की विफलता आदि के कारण) और उलट एसएसएच कनेक्शन को तोड़ता है जो उसने मेरे वीपीसी के साथ बनाया है। इस तरह के मामलों में, मैं अपने घर पीसी से अपने कार्यालय पीसी से कनेक्ट करने में असमर्थ हूं।

मैं अपने ट्रैफ़िक का पता लगाने के लिए उलटा कनेक्शन + डायनेमिक प्रॉक्सी बनाने के लिए निम्न स्क्रिप्ट चलाता हूं (जैसा कि मुझे कार्यालय पीसी पर उत्पन्न ब्राउज़िंग जानकारी साझा करने की आवश्यकता नहीं है)।

autossh -CD 8080 -i digitalOcean -R 8081:localhost:22 root@IPofDigitalOceanPC

कोई तरीका नहीं है कि मैं अपने कार्यालय पीसी पर फिर से पुनः आरंभ करके thsi स्क्रिप्ट चला सकता हूं क्योंकि मैं शारीरिक रूप से वहां नहीं हूं। इस समस्या को हल करने के लिए मैंने निम्नलिखित क्रॉस्टब स्थापित किया।

नोट: rev.shफ़ाइल में उपरोक्त पंक्ति है। प्रमाणपत्र "digitalOcean" और rev.sh में स्थित है Ubuntu home। इसलिए, जब मैं ./rev.shअपने उबंटू टर्मिनल में निष्पादित करता हूं तो मुझे एक डायनेमिक प्रॉक्सी मिलती है और ym DigitalOcean सर्वर तक भी पहुंच मिलती है। यह तरीका 100% काम करता है।

हालाँकि जब मैं निम्नलिखित विधि में कोरटैब स्थापित करता हूं, तो मेरा ubuntu PC कभी भी डायनेमिक प्रॉक्सी नहीं बनाता है। मैं इसे देख सकता हूं क्योंकि जब मैं Google क्रोम से इस प्रॉक्सी की जांच करता हूं, तो यह कहता है कि प्रॉक्सी कनेक्शन से इनकार कर रहा है।

यहाँ cronejobs मैं जड़ों cronejobs के रूप में की कोशिश कर रहे हैं। मैंने एक सामान्य उपयोगकर्ता के रूप में भी इनकी कोशिश की, फिर भी उन्होंने काम नहीं किया।

@reboot bash /home/user/rev.sh 
@reboot /home/user/rev.sh 
@reboot cd /home/user && ./rev.sh

मैंने तब मौजूदा समय से कई मिनट पहले एक चॉर्स्टब स्थापित किया और इसके निष्पादन के लिए इंतजार किया।

24 12 8 * * * bash /home/user/rev.sh
24 12 8 * * * /home/user/rev.sh

इन पर अमल नहीं हुआ।

कृपया मेरी गलती को सुधारने में मेरी मदद करें। मेरे मुद्दे पर इस वेबसाइट पर कई ऐसे ही सवाल हैं। मैंने कई उत्तरों का उल्लेख किया है लेकिन उनमें से कोई भी मदद करने वाला नहीं था।


मुझे यकीन नहीं है कि यहाँ आपकी समस्या क्या है। क्या यह क्रोन कोई काम शुरू नहीं कर रहा है? या स्क्रिप्ट काम नहीं कर रही है? दोनों समस्याओं के साथ, कृपया लॉग से सलाह लें। क्रोन को कहीं लिखना चाहिए /var/log/cron*। परीक्षण प्रयोजनों के लिए आप बस कुछ लिख सकते हैं */2 * * * * /path/to/script- यह हर 2 मिनट में एक स्क्रिप्ट चलाएगा। उपयोगकर्ता क्रोन चलाने के लिए मेल की भी जाँच करें। क्या यह जड़ है? mailकमांड का उपयोग करें । ओह, मैं देख सकता हूँ कि आप ssh कुंजी का उपयोग कर रहे हैं? मुझे संदेह है कि क्रॉन जॉब इसे खोजने में सक्षम होगी यदि आप -iस्विच के बाद इसे पूरा रास्ता नहीं देंगे ।
कलवन

जवाबों:


8

मुझे यकीन नहीं है कि cronस्टार्टअप पर स्क्रिप्ट चलाने के लिए उपयोग करना इतना अच्छा विचार है। एक विकल्प जो मैं अधिक फिट देखता हूं वह है एक SystemD सेवा बनाना, जैसा कि यहां वर्णित है । नाम से एक फ़ाइल बनाएँ /etc/systemd/system/autossh.service:

[Unit]
Description=Auto Reverse SSH
Requires=systemd-networkd-wait-online.service
After=systemd-networkd-wait-online.service
[Service]
ExecStart=/full/path/to/autossh -CD 8080 -i digitalOcean -R 8081:localhost:22 root@IPofDigitalOceanPC
[Install]
WantedBy=multi-user.target

फिर निम्नलिखित कमांड को रूट के रूप में चलाएं:

systemctl enable autossh.service

1

कुछ चीज़ें जो आप आज़मा सकते हैं:

chmod +x rev.sh

कभी-कभी आपका पथ बूट समय पर या क्रोनोजर के माध्यम से पूरी तरह से सेट नहीं किया जाता है, इसलिए मेरे सिस्टम पर पूर्ण पथ के साथ ऑटोस को बदलें

/usr/bin/autossh

@reboot रूपांकना क्रोन डेमॉन स्टार्टअप समय पर निर्भर करता है, इसलिए इसे अन्य सबसिस्टम (नेटवर्क?) से पहले लागू किया जा सकता है और चल रहा है?

और आपका क्रॉस्टैब उदाहरण:

24 12 8 * * * bash /home/user/rev.sh

केवल हर महीने की 8 तारीख को आह्वान करेगा। और इसका एक अतिरिक्त क्षेत्र है। प्रयत्न

24 12 * * * /home/user/rev.sh

मुझे इस गलती के लिए खेद है। मैंने '24 12 * * * /home/user/rev.sh 'की कोशिश की, लेकिन यह अभी भी काम नहीं कर रहा है। मेरे आश्चर्य के लिए भी '24 12 * * * रिबूट 'काम नहीं किया।
डेनिस

1
जब तक आप रूट के रूप में आह्वान नहीं करते हैं, तब तक निश्चित रूप से रीबूट काम नहीं करेगा।
धीमी गति से

मैंने / usr / bin / autossh जोड़ने की कोशिश की। काम नहीं किया।
डेनिस

मैंने कोशिश की 24 12 8 * * * जड़ों crontab में रिबूट। काम नहीं किया। क्या यह आप पर काम करता है?
डेनिस

/usr/binहमेशा के लिए डिफ़ॉल्ट में है PATH, यहां तक ​​किcron
roaima

1

ऐसा प्रतीत होता है, कि जब स्क्रिप्ट को क्रॉस्टैब के माध्यम से निष्पादित किया जाता है, तो यह आपके प्रमाण पत्र को नहीं पा सकता है।

जब आप उपयोगकर्ता स्क्रिप्ट को निष्पादित करते हैं, तो यह /home/ubuntu-user/.ssh / ... से प्रमाण पत्र का उपयोग करता है, हालांकि जब स्क्रिप्ट को क्रॉस्टब से निष्पादित किया जाता है तो यह रूट के रूप में चलता है। root सर्टिफिकेट को /root/.sh से लेता है

इसलिए आपके पास इसे काम करने के लिए कई तरीके हैं, लेकिन मुझे लगता है कि स्क्रिप्ट को ubuntu-user के रूप में चलाना Crontab करता है।

संपादित करें:

प्रमाण पत्र के लिए पूर्ण योग्य पथ प्रदान करना सुनिश्चित करें



0

चूँकि प्रश्न में इतना डेटा नहीं है, इसलिए मैं स्क्रैच से शुरू करूँगा कि मैं क्या करूँगा

मैं सभी विन्यास / etc / ssh / ssh_config में डालूँगा:

 Host mytunnel
    HostName      IPofDigitalOcean
    User          root     # Are you sure about this??
    IdentityFile  /etc/ssh/mytunnel_key
    RemoteForward 8081 localhost:22
    DynamicForward 8080

मैं चाबी लगा देता /etc/ssh/mytunnel_key

तो मैं इस तरह एक क्रोन प्रविष्टि (एक upstart / systemd सेवा बेहतर होगी) के साथ कोशिश करूँगा:

@reboot /usr/bin/autossh -f -M 0 -T -N mytunnel

0

जब आप टर्मिनल के बिना चलाते हैं तो आपको -f का उपयोग और कमांड चलाने की आवश्यकता होती है । तो यहाँ एक उदाहरण है:

autossh -M 12374 \
-R 2205:127.0.0.1:22 \
-p 2200 \
-f \
user@www.hostname.com \
sleep 31536000

-यदि इसे बैकग्राउंड में रखते हैं, लेकिन बैकग्राउंड में रखने का मतलब है कि ssh कनेक्ट हो जाएगा, फिर जैसे ही यह अपना कार्य पूरा करेगा, डिस्कनेक्ट कर दें। इसलिए आपको एक कार्य की आवश्यकता है।

नींद 31536000 ssh को जोड़ने के बाद 1 साल के लिए "नींद" चलाने के लिए कहता है। इस समय के दौरान, आपकी सुरंगें बनी रहेंगी।

यदि आप कोई कमांड नहीं चलाते हैं, तो ssh कनेक्ट हो जाएगा, रिवर्स सुरंग को पोर्ट 2205 पर सेट करें, और जब यह उसके साथ हो जाएगा, तो यह बाहर निकल जाएगा। ऑटोज़ का उपयोग करना, यदि कनेक्शन विफल हो जाता है, तो यह नींद को फिर से जोड़ देगा और पुनः आरंभ करेगा। यहां तक ​​कि वास्तव में स्थिर इंटरनेट कनेक्शन के साथ, मुझे संदेह है कि एक वर्ष संभव है।

BTW - इन अन्य जोकरों के विपरीत, मुझे यह काम पता है, क्योंकि मैंने वास्तव में इसका परीक्षण किया है, क्योंकि मैं निश्चित रूप से ऐसा ही कुछ कर रहा हूं और चूंकि मेरे पास अभी काम कर रहा है, बहुत मज़बूती से, मैं आपको सही उत्तर दे सकता हूं।

-f और "कमांड"

वही तो तुम चूक रहे हो।


1
मुझे नहीं लगता कि हमें यहां अन्य लोगों के नामों को बुलाने की आवश्यकता है।
जेफ स्कालर

1
मैं अन्य लोगों के नाम नहीं बुला रहा हूं। मैं उन समाधानों की ओर इशारा कर रहा हूं जो पहले सुझाए गए थे, उन लोगों द्वारा कभी कोशिश नहीं की गई थी जिन्होंने उन्हें सुझाव दिया था। मुझे विश्वास नहीं है? उन्हे आजमायें।
जिम्मी डोए

1
मुझे नहीं लगता कि आपने प्रश्न के बिंदु को संबोधित किया है, या तो - ओपी का दावा है कि यह विधि 100% काम करती है । मेरा मानना ​​है कि उनके प्रश्न केंद्र अपने पीसी के पुनरारंभ होने के बाद अपनी स्क्रिप्ट को स्वचालित तरीके से चलाने के आसपास हैं।
जेफ स्कालर

1
यदि वह काम पर है, तो वह घर के लिए रिवर्स सुरंगों को स्थापित कर सकता है, क्योंकि ओपी एक टर्मिनल में चल रहा है - यह समय का 100% काम करता है। Ssh (और autossh) प्रोग्राम अलग तरह से कार्य करते हैं यदि उनके पास प्रक्रिया से जुड़ा कोई टर्मिनल नहीं है। उन्हें कॉन्टैब (जो बिना टर्मिनल के चलता है) की समस्या थी, वे सुरंगों को फिर से जोड़ देते हैं, ठीक है क्योंकि वह -f का उपयोग नहीं कर रहा है, और यहां तक ​​कि अगर वह था, तो एक बार सुरंग खोदने के बाद एसएचएस बाहर निकल जाएगा, बिना कुछ चलाए - मेरे मामले में, मैं जाता हूं एक साल तक सोते रहो। स्क्रिप्ट में-का उपयोग एक कॉम के साथ किया जाना चाहिए जो एसएसएच को बाहर निकलने से रोकता है। यही उसकी समस्या है।
जिम्मी डो

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