मैं SSH अग्रेषित पोर्ट को कैसे हटाऊं


52

मैं ssh -L 10002:192.168.0.30:10002 192.168.1.135पोर्ट फ़ॉरवर्डिंग स्थापित करता था, लेकिन अब मुझे इसे हटाने की आवश्यकता है।

मैं यह कैसे करु?


हम अक्सर महसूस करते हैं कि पोर्ट तब भी आगे भेजा जा रहा है जब हम उसी कमांड को फिर से चलाने और Warning: remote port forwarding failed for listen portसंदेश पाने के लिए एक नया ssh सत्र फायर करते हैं ।
गाबेलरॉक्स

जवाबों:


56

यदि आप लिनक्स का उपयोग कर रहे हैं, तो आप इस प्रक्रिया को मार सकते हैं:

ps aux | grep ssh

और फिर उपयोग करें

kill <id>

प्रक्रिया को मारने के लिए।

यदि मार कमांड सफल नहीं है, तो आप कोशिश कर सकते हैं

kill -9 <id>

31
नहीं। कृपया नहीं, कृपया, कृपया उपयोग करें kill -9जब तक कि आपने अभी कोशिश नहीं की है kill। कई प्रक्रियाओं में सिग्नल हैंडलर होंगे जो अपने संसाधनों का उपयोग, करीबी कनेक्शन और अन्य पूर्व-बंद कार्यों को साफ करेंगे। यदि आप -9 के साथ मारते हैं, तो प्रक्रिया सफाई किए बिना तुरंत मर जाती है। -9 के बिना हत्या ज्यादातर समय काम करेगी
डग हैरिस

17
kill -9बिना कारण मच्छर को मारने के लिए बन्दूक का उपयोग करना पसंद है। :)
डैरेन हॉल

2
मैं आमतौर पर एक लाइनर करता हूं pgrep ssh | xargs kill-9वास्तव में कुछ भी नहीं के लिए उपयोग न करें
गैबेलरॉक्स

2
@GabLeRoux यह मानता है कि आपके पास केवल एक ही sshआदेश है, या यह कि आप जो भी कमांड sshचला रहे हैं, उसे मारने के लिए ठीक है। यह शायद ही एक अच्छी सामान्य धारणा है।
ट्रिपलए

2
@Avander मैं sshहर समय कई दूरस्थ सर्वरों पर कई उदाहरणों से जुड़ता हूं , उनमें से कुछ मेरी प्रत्यक्ष सक्रिय भागीदारी के बिना हैं। उदाहरण के लिए, Emacs Tramp मोड sshजब मैं एक दूरस्थ बफर पर जाता हूं तो पर्दे के पीछे एक कनेक्शन खोलता है । कुछ लोग यूजरस्पेस फाइलसिस्टम का उपयोग करते हैं जो कुछ ऐसा ही करते हैं। यह बिल्कुल असामान्य नहीं है। वास्तव में, मैं एकल उपयोगकर्ता को मान लूंगा, sshअल्पसंख्यक फ्रिंज उपयोग के मामले में एकल उदाहरण। अगर यह आपके लिए काम करता है, तो आपके लिए अच्छा है, लेकिन यह सामान्य सलाह नहीं है।
ट्रिपलए

19

Ssh मल्टीप्लेक्सिंग का उपयोग करते समय, ssh प्रक्रिया को मारना अक्सर अवांछनीय होता है (यह उस होस्ट के साथ सभी खुले कनेक्शनों को मारता है), और आप आसानी से भागने का उपयोग नहीं कर सकते हैं क्योंकि "एस्केप मल्टीप्लेक्सेड सत्रों के लिए उपलब्ध नहीं है"। सही तरीका तो यह है कि आप जिस कमांड को रद्द करना चाहते हैं, उसके अग्र भाग को चलाएं, लेकिन जोड़ते हुए -O cancel। उदाहरण के लिए:

ssh -O cancel -L 10002:192.168.0.30:10002 192.168.1.135

यह सत्र समाप्त किए बिना इस पोर्ट अग्रेषण को अक्षम कर देगा। फिर, यह केवल तभी काम करेगा जब ssh मल्टीप्लेक्सिंग 192.168.1.135 के कनेक्शन के लिए उपयोग में हो


मुझे बहुत खुशी है कि यह मौजूद है और मैंने इसे पाया, बहुत धन्यवाद!
गलवा

2
यह सबसे अच्छा उपाय है। गुरु को मारने के लिए बस दौड़ो ssh -O exit 192.168.1.135
ओरिएंट

यदि आप मल्टीप्लेक्सिंग सत्र नहीं कर रहे हैं , तो प्रोमुमा का उत्कृष्ट उत्तर देखें! (मेरे टाइपो को पकड़ने के लिए धन्यवाद a3nm।)
एलन डी स्मेट

बहुत बढ़िया! यह चुना हुआ उत्तर होना चाहिए!
Truong गुयेन

13

पहले से चल रहे SSH सत्र में अग्रेषित पोर्ट को कैसे रद्द करें:

  1. प्रेस ~+ C(टिल्ड + कैपिटल सी)
  2. प्रकार -KL port
  3. एंटर दबाए

आपको यह देखना चाहिए:

ssh> -KL 10002
Canceled forwarding.

12

आप "एस्केप-की" का उपयोग कर सकते हैं (आमतौर पर ~) सी के बाद आपके कनेक्शन के लिए एक क्ली प्राप्त करने के लिए। आप वहां से अपने कनेक्शन को हटाए बिना सुरंगों को हटा सकते हैं।


1
मैं इसकी बारीकियों को जानना चाहूंगा। मुझे पता है कि आप SSH'd में आने के बाद सुरंगों को जोड़ सकते हैं , लेकिन अभी तक यह पता लगाना नहीं है कि कैसे नीचे ले जाना है।
carestad

9
जब आप सीएलआई मोड में होते हैं तो आप मदद कर सकते हैं। -KL का oppsite है -L, -KR का oppsite है -R और -KD का oppsite है -D। "एस्केप-की" (~) के बाद करना # आपकी सुरंगों को दिखाता है।
जिमी हेडमैन 11

1
@JimmyHedman आप अपने उत्तर को अतिरिक्त रूप से टिप्पणी जोड़ने के लिए संपादित करना चाह सकते हैं। यह सब कुछ अधिक पठनीय बनाता है। और कभी-कभी टिप्पणियां छिपी होती हैं (मामले में बहुत अधिक हैं)।
15

7

आप टाइप करके एक इंटरैक्टिव कंसोल दर्ज कर सकते हैं ~C(राजधानी "सी")। यह आपको पोर्ट फॉरवर्डिंग (कुछ अन्य चीजों के बीच) को गतिशील रूप से जोड़ने और हटाने देता है।

इस अनुक्रम को एक गाड़ी वापसी / न्यूलाइन के ठीक बाद आना होगा । तो संदेह में, बस टाइप करें Enter~C(क्रम में)।

यदि आपको कंसोल पर वर्ण दिखाई नहीं देते हैं, तो आप इसे सही कर रहे हैं :)

अब आपको एक ssh>प्रॉम्प्ट देखना चाहिए ।

बंदरगाह को हटाने के लिए, बस -KL 10002इसके बाद Enter(जहां 10002आपका अग्रेषित पोर्ट है) दर्ज करें।

उलटा - एक नया आगे जोड़ना - इस तरह से किया जा सकता है (शुरू से अंत तक):

Enter~C

ssh> -L 10002:192.168.0.30:10002

Enter


यदि आप कनेक्शनों को बहुसंकेतन नहीं कर रहे हैं तो यह सही उत्तर है । यदि आप हैं, तो आप के साथ बाउंस हो जाएगा ~C escape not available to multiplexed sessions। यदि ऐसा है, तो a3nm का उत्कृष्ट उत्तर देखें।
एलन डे स्मेट
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.