ssh -L (ข้อผิดพลาด: ผูก: มีการใช้ที่อยู่แล้ว)


48

ค่อนข้างง่ายฉันรู้ว่านี่เคยเกิดขึ้นกับฉันมาก่อน ไม่พบคำตอบที่ดีสำหรับ AU

ฉันใช้เซสชั่น SSH กับพอร์ตที่ถูกผูกไว้:

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:59015901เพื่อหาสิ่งที่จะใช้พอร์ต

ผ่านสิ่งที่ทั้งเพื่อที่จะฆ่าอะไรก็ตามที่ใช้พอร์ตkill -95901

แทนที่ด้วยพอร์ตที่คุณต้องการเปิดอีกครั้ง


ใช่คุณสามารถเปลี่ยนหมายเลขพอร์ตเป็นพอร์ตใดก็ได้ที่ถูกบล็อก ฉันจะทำเครื่องหมายสิ่งนี้เป็นคำตอบ
kbuilds

หากคุณระมัดระวังและ / หรือหลงลืมเหมือนฉันคุณอาจต้องการเรียกใช้ lsof ด้วยตนเองและค้นหาว่ากระบวนการนี้คืออะไรก่อนที่จะฆ่ามัน lsof -ti:5901จะส่งคืนหมายเลขกระบวนการซึ่งคุณจะส่งไปยังkill -9
octern

3
เกิดอะไรขึ้นถ้าไม่มีอะไรใช้พอร์ต 5901 (หรือพอร์ตท้องถิ่นใด ๆ ที่คุณกำลังระบุ)
Michael

ลองsudoถ้ากระบวนการไม่ได้เกิดขึ้นlsof
รวย remer

2
ไม่มีเหตุผลที่จะkill -9ยกเว้นว่าโปรแกรมไม่ตอบสนองอย่างสมบูรณ์ การฆ่าโปรเซสที่มีสัญญาณ # 9 (SIGKILL) จะยุติในทันทีโดยไม่ให้โอกาสในการลบบัฟเฟอร์, ปิด filehandles และซ็อกเก็ต, ลบไฟล์ชั่วคราว, ฯลฯ , ซึ่งกระบวนการทั้งหมดสามารถทำได้หากคุณใช้kill(ค่าเริ่มต้นเป็น SIGTERM) ตามด้วยkill -1(SIGHUP; hangup) และ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และทำให้มันตายได้ เดาว่าไม่ใช่กรณี
kbuilds

ขอบคุณสำหรับการเตือนให้ใช้sudo- นั่นคือสิ่งที่ฉันหายไป
ACV

5

ฉันสามารถสร้างและแก้ไขได้โดยทำสิ่งต่อไปนี้:

  • เปิดบางสิ่งที่จะแสดงรายการกระบวนการของคุณ ( ps -ae)
  • ฆ่ากระบวนการที่เรียกว่าsh( kill <proc_number>)

จากนั้นเปิดการเชื่อมต่อ ssh อีกครั้ง

หรือมิฉะนั้นฉันก็ประสบความสำเร็จด้วย:

killall ssh

ในเครื่องบนเครื่องท้องถิ่น


2

อีกหนึ่งคู่แข่ง: ss

สามารถใช้ดังนี้: ss -ltp | grep 3000เพื่อค้นหาโปรแกรมที่ฟังบนพอร์ต 3000

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.