ssh -L (error: bind: Address already in use)
Pretty simple, I know that this has happened to me before. Couldn't find a good answer on AU.
I was running an ssh session with ports bound:
ssh -L 3000:<server_name>:22
I just lost my connection. When I try to reconnect using the same command, I get the following error:
bind: Address already in use
channel_setup_fwd_listener: cannot listen to port: 3000
How do I reset ssh on my machine to allow the port to be bound again? Resetting the local machine works.
Solution 1:
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.
Solution 2:
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.
Solution 3:
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