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>:22I 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: 3000How do I reset ssh on my machine to allow the port to be bound again? Resetting the local machine works.
04 Answers
Couldn't you just kill whatever is using that port?
lsof -ti:5901 | xargs kill -9lsof -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.
7I 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-servercorrectly 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.
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 sshIn the terminal on the local machine
one more contender: ss
it can be used like this: ss -ltp | grep 3000 to find the program listening on port 3000