ssh -L(錯誤:綁定:地址已在使用中)


57

很簡單,我知道這以前發生在我身上。在AU上找不到合適的答案。

我正在通過綁定的端口運行ssh會話:

ssh -L 3000:<server_name>:22

我剛失去聯繫。當我嘗試使用相同的命令重新連接時,出現以下錯誤:

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

如何在計算機上重置ssh以允許再次綁定端口?重置本地機器。

13

I suppose you have still something connected to local port 3000.

You can find it with

netstat -tulpn | grep 3000 

and then dispose of it. For example in my machine:

[:~] % 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

correctly identifies the process waiting and connected on port 5900 (vnc server).

Another useful command is

fuser 3000/tcp 

...all of them may need to be run with sudo if you do not own the process which is opening the port.


5

I was able to recreate and fix it by doing the following:

  • Open up something that will list your processes (ps -ae)
  • Kill the process called sh (kill <proc_number>)

Then reopen the ssh connection

Alternatively, I have had success with:

killall ssh

In the terminal on the local machine


77

Couldn't you just kill whatever is using that port?

 lsof -ti:5901 | xargs kill -9

lsof -ti:5901 to find whatever is using port 5901.

Pass the whole thing to kill -9 to kill whatever was using port 5901.

Replace with the port you want to open up again.


2

one more contender: ss

it can be used like this: ss -ltp | grep 3000 to find the program listening on port 3000