एक सर्वर में डबल हॉप SSHing जब दूरस्थ प्रक्रिया को मार डालो


1

मैं एक डबल हॉप एसएसएच कर रहा हूं, जो पहले एक सर्वर में मिलता है, जिसमें एक सार्वजनिक आईपी पता होता है और एसएसएच पोर्ट खुला होता है, फिर अगले कंप्यूटर में एसएसएचिंग होता है, जबकि मेरे स्थानीय वीएनसी पोर्ट को रिमोट सिस्टम पोर्ट से जोड़ता है। चित्र में:

[मेरा लोकल सिस्टम] --- एसएसएच टनल (पोर्ट ५ ९ ०० फॉरवर्ड) -> [सर्वर] - एसएसएच टनल (पोर्ट ५ ९ ०० फॉरवर्ड) -> [रिमोट सिस्टम]

मैंने यह सब करने के लिए एक एकल स्ट्रिंग कमांड बनाया है, लेकिन एक पकड़ है। x11VNC एक अयोग्य राशि को दुर्घटनाग्रस्त करता प्रतीत होता है। वस्तुतः मेरे सिस्टम के फिर से जमने से पहले मुझे 10 मिनट का काम मिल सकता है और मुझे x11vnc को फिर से शुरू करना होगा। लेकिन यह ऐसा सवाल नहीं है।

मैं जिस कमांड का उपयोग कर रहा हूं वह इस प्रकार है:

ssh -L 5900:[REMOTE SYSTEM IP]:5900 user@FQDN.SERVER.NET 'ssh [REMOTE SYSTEM IP] 'pkill x11vnc; x11vnc --ncache 10''

अब मैंने इसमें PKILL कमांड को शामिल किया है, इसलिए यह जमे हुए x11vnc उदाहरण को हटा देगा जो अभी भी चल रहा है इसलिए मैं पोर्ट 5900 को मुक्त कर सकता हूं (और मेरे सिस्टम को अनुमति देने वाली ज़ोंबी प्रक्रिया नहीं है): हालांकि यह काम नहीं करता है। कोई फर्क नहीं पड़ता कि मैं क्या करता हूं, अगर इसकी दोहरी उम्मीद है, तो यह सिर्फ x11vnc देता है , कमांड नहीं मिला

नोट : यदि मैं pkill निकालता हूं, तो यह कमांड स्ट्रिंग पूरी तरह से काम करता है। लेकिन मुझे ज़ोंबी को मारने की जरूरत है

यदि सर्वर से लेकिन मैं कमांड चलाने की कोशिश करता हूं:

ssh [REMOTE SYSTEM IP] 'pkill x11vnc; x11vnc --ncache 10' 

यह ठीक काम करता है! क्या किसी को पता है कि "डबल हॉप" ssh कनेक्शन करते समय यह अभ्यस्त काम क्यों करता है?

जवाबों:


1

आपके उदाहरण से, ऐसा लगता है कि आप एकल उद्धरणों के एक सेट के भीतर एकल उद्धरणों का एक सेट बना रहे हैं। आपको उद्धरण के आंतरिक सेट और अर्धविराम को इस तरह "बचाना" चाहिए:

ssh -L 5900:[REMOTE SYSTEM IP]:5900 user@FQDN.SERVER.NET 'ssh [REMOTE SYSTEM IP] \'pkill x11vnc\; x11vnc --ncache 10\''

वैकल्पिक रूप से, आप x11vnc चलाने वाले सिस्टम पर एक छोटी बैच फ़ाइल बना सकते हैं। स्क्रिप्ट आपके लिए x11vnc को मारता है, फिर आप सभी स्क्रिप्ट को अपनी अंतिम कमांड के रूप में चलाते हैं।


सच्ची कहानी, मैं बस यही उम्मीद कर रहा था कि मैं ऐसा करने के लिए एक रास्ता खोज पाऊँगा। यह सिर्फ छोटी स्क्रिप्ट की एक किस्म का परिणाम है, बस हर जगह चारों ओर लात मार रहा है। मुझे लगता है कि मैं x11vnc निष्पादन स्क्रिप्ट को x11vnc-सिंगल की तरह कुछ फिर से लिख सकता हूं जो पहले किसी भी चल रहे उदाहरण के pkill करता है। किसी भी तरह से, आपकी मदद के लिए धन्यवाद, और अंतर्दृष्टि।
डायनामॉर्फस

मैंने आंतरिक उद्धरणों से बचने की कोशिश की, लेकिन यह पाया कि अनपेक्षित रूप से EOF को वापस लाया गया जबकि `` 'की खोज की। यह अनपेक्षित था।
डायनामॉर्फस

आप दो आदेशों के लिए अलग-अलग उद्धरणों का उपयोग करने का प्रयास कर सकते हैं। बाहरी के लिए "" का उपयोग करें, फिर आंतरिक लोगों के लिए ''। आप से बचने की आवश्यकता हो सकती है ";" pkill और x11vnc के बीच।
dan_linder 21

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

0

मैं आखिरकार समस्या को हल करने में सक्षम था। यह पता चला है कि मुझे 'इनर' के लिए 'के बजाय' का उपयोग करने की आवश्यकता थी। (एकल उद्धरण के बजाय बैकटिक (गंभीर उच्चारण))

तो अंतिम, काम कमांड है:

ssh -L 5900:[REMOTE SYSTEM IP]:5900 user@FQDN.SERVER.NET 'ssh [REMOTE SYSTEM IP \`pkill x11vnc\; x11vnc --ncache 10\`'
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.