कनेक्टेड दूरस्थ SSH होस्ट से स्थानीय कंप्यूटर पर एक कमांड निष्पादित करें?


13

कहते हैं कि मैं SSH के माध्यम से एक दूरस्थ कंप्यूटर से जुड़ा हुआ हूं। इस दूरस्थ कंप्यूटर पर एक कार्यक्रम से, मुझे अपने स्थानीय कंप्यूटर (कनेक्शन सर्जक) पर एक कमांड निष्पादित करने की आवश्यकता है।

जो सवाल उठाता है: क्या स्थानीय कंप्यूटर पर कमांड चलाने के लिए दो कंप्यूटरों के बीच मौजूदा कनेक्शन पर जोंक लगाना संभव है?

मैंने ssh user@host-of-connecting-party <command>दूरस्थ कंप्यूटर पर एक उल्टा कनेक्शन स्थापित करने के लिए कमांड चलाने पर विचार किया है। लेकिन यह स्वचालित करने के लिए कठिन है और उपयोगकर्ता के हस्तक्षेप की आवश्यकता होगी। मैं उम्मीद कर रहा था कि मैं इसे पूरी तरह से स्वचालित कर सकता हूं, या कम से कम संबंधित उपयोगकर्ता के उपयोगकर्ता / होस्टनाम का पता लगा सकता हूं।


यह स्पष्ट है कि आप क्या करना चाहते हैं। मेरे लिए जो स्पष्ट नहीं है वह वह हिस्सा है जहां आप कहते हैं "मुझे उम्मीद थी कि मैं इसे पूरी तरह से स्वचालित कर सकता हूं, या कम से कम उपयोगकर्ता / जुड़े उपयोगकर्ता के होस्टनाम का पता लगा सकता हूं।" क्या मतलब?
hytromo

"कठिन और स्वचालित करने के लिए उपयोगकर्ता के हस्तक्षेप की आवश्यकता होगी" इस मामले में "सुरक्षित" का पर्याय है। यदि कोई दूरस्थ होस्ट क्लाइंट्स पर कमांड चलाने में सक्षम था जो इसे कनेक्ट करता है, तो यह बहुत असुरक्षित होगा ... कल्पना कीजिए कि एक सर्वर से समझौता हो गया और जो कोई भी इसे जोड़ता है वह सिर्फ अपने स्थानीय मशीन को संक्रमित करता है ... जो मजेदार होगा :)
सेर्गेई

जवाबों:


6

@ 62mkv का जवाब एक बेहतर समाधान है। उसका उपयोग करें।

पूर्णता और जिज्ञासा के लिए, यदि आपके पास अपने स्थानीय मशीन पर एक ssh सर्वर चल रहा है, तो आप पोर्ट 222 पर दूरस्थ होस्ट से ssh कनेक्शन की अनुमति देने के लिए एक ssh सुरंग बना सकते हैं, जो पोर्ट 22 पर स्थानीय एक पर है। उदाहरण के लिए कमांड:

ssh -R20202:localhost:22 remoteuser@remotehost.com

यह एक ssh कनेक्शन शुरू करेगा, लेकिन आपके मशीन पर चल रहे ssh सर्वर पर एक सुरंग भी स्थापित करेगा। तब आप ऐसा कर सकते हैं, जब दूरस्थ मेजबान में ssh'ed:

ssh -p 20202 localuser@localhost

बेशक, यह जल्दी से भ्रमित हो सकता है - खासकर अगर तकनीक एक से अधिक बार नेस्टेड हो। यह थोड़ा विलंबता भी जोड़ता है, क्योंकि आपके स्थानीय मशीन पर आपके द्वारा निष्पादित सब कुछ दूरस्थ होस्ट के माध्यम से बाउंस होता है।

उन लोगों के लिए ssh टनलिंग के बारे में अतिरिक्त जानकारी जिनकी जिज्ञासा अभी तक संतुष्ट नहीं हुई है, इस यूनिक्स स्टैकएक्सचेंज प्रश्न के उत्तर में पाया जा सकता है ।


यह एक उत्कृष्ट उत्तर है। वास्तव में क्या मैं एक दूरस्थ मशीन जो एक फ़ायरवॉल के पीछे ssh करने के लिए सक्षम होने के लिए सक्षम होने की जरूरत थी और जो केवल टीमनेव्यू के माध्यम से सुलभ था। मैं बस टीमव्यूअर से फिर टीमव्यूअर सेशन से वापस अपनी मशीन से जुड़ा हुआ हूँ और ssh सुरंग का निर्माण कर रहा हूँ और फिर मैं अपने कंप्यूटर से रिमोट के लिए कई ssh सेशन को खोल सकता हूँ जितना मुझे ज़रूरत थी।
मैरियन

वास्तव में, यह इस @Marian की तरह एक सुरंग के लिए एक बेहतर उपयोग मामला है। मैं खुद ऐसा करता हूं।
स्टारबिम्रेनबोलाब्स

5

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

कभी-कभी मुझे बस एक "वीपीएन सर्वर मशीन" पर जल्दी से कुछ जांचने की आवश्यकता होती है, जबकि अभी भी मेरा "एसश-सत्र" चल रहा है। एक दृष्टिकोण के तहत एक ssh सत्र चलाना है screen, जो, जैसा कि मैंने देखा है, "नियमित ssh" की तुलना में कुछ देरी जोड़ें। एक अन्य दृष्टिकोण, जिसे मैं यहाँ साझा करना चाहता हूँ, वह निम्नलिखित है:

SSH सत्र के तहत, दबाएँ Enter, फिर ~, (सुनिश्चित करें कि यह प्रदर्शित नहीं है, यानी आप कमांड मोड में हैं), फिर Ctrl- Z। यह ssh क्लाइंट प्रक्रिया को "होस्ट" बैकग्राउंड पर रखेगा, और आप कुछ की तर्ज पर होंगे:

[root@client170 ~]# ~^Z [suspend ssh]

[1]+  Stopped                 ssh root@10.0.0.167
[root@vps291736 ~]#

अब आप "होस्ट" पर हैं, आप जो चाहें कर सकते हैं (हालाँकि, मुझे यकीन नहीं है कि ssh सत्र को कितने दिनों तक जीवित रखा जाएगा), और फिर SSH सत्र चलाकर fg

कम से कम, यह मेरे लिए काम करता है जब मैं एक Win10 वर्कस्टेशन से एक सेंटोस-आधारित वीएम पर पुट्टी के माध्यम से जुड़ा हुआ हूं, और उस वीएम एसएसएच से कुछ अन्य होस्ट से कनेक्ट करता है।

आशा है कि यह किसी की मदद करता है!


2
यदि आपके पास PermitLocalCommand yesअपने .ssh/configमेजबान के लिए है, तो आप भी कर सकते हैं <Enter>~C, फिर !<command>
मोरू

0

यदि आपका स्थानीय और दूरस्थ कंप्यूटर दोनों इंटरनेट से सुलभ हैं, तो आप दूरस्थ कंप्यूटर पर अपने स्थानीय कंप्यूटर से सिर्फ SSH सत्र खोल सकते हैं, और फिर उस सत्र में स्थानीय कंप्यूटर पर दूरस्थ कंप्यूटर से एक और ssh सत्र खोलें:

localuser@local> ssh remoteuser@remote
Password:
remoteuser@remote> hostname
remote
remoteuser@remote> ssh localuser@local
Password:
localuser@local> hostname
local
localuser@local> exit
remoteuser@remote> exit
localuser@local>

सामान को स्वचालित करने के लिए फैब्रिक (अजगर ज्ञान की आवश्यकता) पर एक नज़र

from fabric.api import *

@hosts('host1')
def clean_and_upload():
    local('find assets/ -name "*.DS_Store" -exec rm '{}' \;')
    local('tar czf /tmp/assets.tgz assets/')
    put('/tmp/assets.tgz', '/tmp/assets.tgz')
    with cd('/var/www/myapp/'):
        run('tar xzf /tmp/assets.tgz')

0

आप दूरस्थ कंप्यूटर से कनेक्ट करने और कमांड चलाने के लिए sshpass का उपयोग कर सकते हैं ।

./sshpass -p "password" ssh user@remoteIP 'bash -s < EOI "Your Commands go here" EOI'

जब भी आप दूरस्थ कंप्यूटर पर कमांड चलाना चाहते हैं, स्थानीय कंप्यूटर पर सरल शेल स्क्रिप्ट का उपयोग करें और उपरोक्त कोड का उपयोग करें। यह एक तरह से मैं आमतौर पर स्वचालन में प्रयोग किया जाता है।


0

नहीं, आप मौजूदा सत्र में नहीं तोड़ सकते।

आपके एप्लिकेशन को क्लाइंट से वापस कनेक्ट करने के लिए एक तरीके की आवश्यकता होगी। SSH काम करेगा यदि क्लाइंट के पास SSH सर्वर चल रहा है और सर्वर क्लाइंट पर पोर्ट 22 तक पहुंच सकता है। यदि आप पासवर्ड प्रमाणीकरण के बजाय कुंजी-आधारित प्रमाणीकरण का उपयोग करते हैं, तो इसे स्वचालित करना मुश्किल नहीं होगा - इस तरह से उपयोगकर्ता हस्तक्षेप आवश्यक नहीं होगा।

कुंजी आधारित प्रमाणीकरण स्थापित करने की जानकारी यहां मिल सकती है: http://tombuntu.com/index.php/2008/02/20/public-key-authentication-for-ssh-made-easy/


0

यदि आपके पास किसी अन्य टर्मिनल तक पहुंच है, तो आप "किल -19 पीआईडी" का उपयोग करके एसआईजीएसटीओपी भेज सकते हैं, जो कि एसएन कमांड को प्रदान करता है। फिर आपको क्लाइंट मशीन पर टर्मिनल पर टर्मिनल का नियंत्रण मिलेगा। एक बार जब आप समाप्त कर लेते हैं, तो आप ssh क्लाइंट को जगाने के लिए fg टाइप करके ssh कनेक्शन को पुनर्स्थापित कर सकते हैं।

लेकिन निश्चित रूप से यहाँ सवाल यह है: यदि आप पहले से ही ग्राहक मशीन पर एक टर्मिनल है तो आप ऐसा क्यों करेंगे :)

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