ssh -L (त्रुटि: बाइंड: पता पहले से उपयोग में)


48

बहुत सरल, मुझे पता है कि यह मेरे साथ पहले भी हो चुका है। एयू पर एक अच्छा जवाब नहीं मिल सका।

मैं बंदरगाहों के साथ बाध्य सत्र चला रहा था:

ssh -L 3000:<server_name>:22

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

bind: Address already in use
channel_setup_fwd_listener: cannot listen to port: 3000

पोर्ट को फिर से बाध्य करने की अनुमति देने के लिए मैं अपनी मशीन पर ssh को कैसे रीसेट करूं? स्थानीय मशीन कार्यों को रीसेट करना।

जवाबों:


66

क्या आप उस बंदरगाह का उपयोग कर रहे हैं, जिसे आप मार नहीं सकते?

 lsof -ti:5901 | xargs kill -9

lsof -ti:5901जो कुछ भी पोर्ट का उपयोग कर रहा है उसे खोजने के लिए 5901

kill -9पोर्ट जो भी इस्तेमाल कर रहा था उसे मारने के लिए पूरी बात पास करें 5901

उस पोर्ट से बदलें जिसे आप फिर से खोलना चाहते हैं।


हां, आप पोर्ट नंबर को बदल सकते हैं जो भी पोर्ट को ब्लॉक किया जा रहा है। मैं इसे उत्तर के रूप में चिह्नित करने जा रहा हूं।
kbuilds

यदि आप मेरी तरह सतर्क और / या भुलक्कड़ हैं, तो आप अपने दम पर lsof चलाना चाहते हैं और यह जान सकते हैं कि इसे मारने से पहले क्या प्रक्रिया है। lsof -ti:5901एक प्रक्रिया संख्या लौटाएगा, जिसे आप तब पास करते हैंkill -9
अष्टकवर्ग

3
क्या होगा अगर कुछ भी 5901 पोर्ट का उपयोग नहीं कर रहा है (या जो भी स्थानीय पोर्ट आप निर्दिष्ट कर रहे हैं)?
माइकल

sudoअगर प्रक्रिया के साथ नहीं आ रहा है तो कोशिश करेंlsof
अमीर

2
kill -9जब तक कि कार्यक्रम पूरी तरह से अनुत्तरदायी न हो, कोई कारण नहीं है। सिग्नल # 9 (SIGKILL) के साथ एक प्रक्रिया को मारना, प्रक्रिया को तुरंत बुझने का मौका देता है, बफ़र्स, क्लोज़हैंडल और सॉकेट्स को बंद करने, अस्थायी फ़ाइलों को हटाने आदि के बिना इसे समाप्त कर देता है, यह सब प्रक्रिया यदि आप उपयोग कर सकते हैं kill(SIGTERM को दोष) , उसके बाद kill -1(Sightup; हैंगअप) और kill -2(SIGINT; क्या Ctrl + C भेजता है) अगर वह काम नहीं करता है, और अंत में kill -9 अगर कुछ और काम नहीं करता है
TheDudeAbides

12

मुझे लगता है कि आपके पास अभी भी स्थानीय पोर्ट 3000 से जुड़ा कुछ है।

आप इसके साथ पा सकते हैं

netstat -tulpn | grep 3000 

और फिर इसका निपटान करें। मेरी मशीन में उदाहरण के लिए:

[:~] % netstat -tulpn | grep 5900
(Not all processes could be identified, non-owned process info
 will not be shown, you would have to be root to see it all.)
tcp        0      0 0.0.0.0:5900            0.0.0.0:*               LISTEN      2547/vino-server
tcp6       0      0 :::5900                 :::*                    LISTEN      2547/vino-server

सही ढंग से प्रतीक्षा कर रही प्रक्रिया की पहचान करता है और पोर्ट 5900 (vnc सर्वर) पर जुड़ा होता है।

एक और उपयोगी कमांड है

fuser 3000/tcp 

... उन सभी को चलाने की आवश्यकता हो सकती है sudoयदि आपके पास पोर्ट खोलने की प्रक्रिया नहीं है।


जवाब के लिए धन्यवाद। मुझे यह देखने के लिए खुदाई करनी होगी कि क्या मैं इस मुद्दे को फिर से बना सकता हूं। एकमात्र संभव अनुप्रयोग जो पोर्ट 3000 पर सुन सकता था वह पुराना ssh सत्र था जिसे डिस्कनेक्ट कर दिया गया था। मेरे उपयोगकर्ता के पास इस प्रक्रिया का स्वामित्व है, इसलिए मैंने मान लिया कि मैं इसे चला पाऊंगा killall sshऔर मर जाऊंगा। अनुमान है कि ऐसा नहीं है
१५'१४

उपयोग करने के लिए अनुस्मारक के लिए धन्यवाद sudo- यही मैं गायब था।
एसीवी

5

मैं निम्नलिखित करके इसे पुनः बनाने और ठीक करने में सक्षम था:

  • कुछ खोलें जो आपकी प्रक्रियाओं को सूचीबद्ध करेगा ( ps -ae)
  • नामक प्रक्रिया को मार डालो sh( kill <proc_number>)

फिर ssh कनेक्शन को फिर से खोलें

वैकल्पिक रूप से, मुझे इसके साथ सफलता मिली है:

killall ssh

स्थानीय मशीन पर टर्मिनल में


2

एक और दावेदार: ss

इसका उपयोग इस तरह किया जा सकता है: ss -ltp | grep 30003000 पोर्ट पर सुनने वाले प्रोग्राम को खोजने के लिए

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