很简单,我知道我以前也遇到过这种情况。在 AU 上找不到好的答案。
我正在运行一个绑定端口的 ssh 会话:
ssh -L 3000:<server_name>:22
我刚刚失去了连接。当我尝试使用相同命令重新连接时,出现以下错误:
bind: Address already in use
channel_setup_fwd_listener: cannot listen to port: 3000
如何重置机器上的 ssh 以允许再次绑定端口?重置本地机器有效。
答案1
你不能直接杀死正在使用该端口的程序吗?
lsof -ti:5901 | xargs kill -9
lsof -ti:5901
查找正在使用端口的任何内容5901
。
将整个内容传递给以kill -9
终止正在使用端口的任何内容5901
。
替换为您要再次开放的端口。
答案2
我认为您仍有某些东西连接到本地端口 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
...如果您不拥有打开端口的进程,则可能需要运行所有这些进程。
答案3
我可以通过执行以下操作来重新创建并修复它:
- 打开某个可以列出你的进程的东西(
ps -ae
) sh
终止名为(kill <proc_number>
)的进程
然后重新打开ssh连接
另外,我已经成功做到了:
killall ssh
在本地机器的终端中
答案4
只需在此处链接此答案,因为它对我来说是此问题的永久解决方案。我使用多跳 SSH 绑定连接到 Postgres、MySql 和 MongoDB 数据库,例如:
ssh -L 5432:localhost:5432 -L 27017:localhost:27017 -L 3306:localhost:3306 user-name@first-hop-ip -p [ssh-port] -t ssh -L 5432:localhost:5432 -L 27017:localhost:27017 -L 3306:localhost:3306 user-name@second-hop-ip -p [ssh-port]
即使 SSH 因空闲而断开连接,第一跳仍保持绑定处于活动状态。
解决方案文本取自以下原始答案:
您必须在 sshd_config 中使用 ClientAliveInterval。
ClientAliveInterval 15
原因:
当我们没有明确退出与 SSH 的连接(例如通过 Ctrl+C 或exit
命令),但由于网络问题或长时间闲置而关闭时,第一个 SSH 跳转/服务器会保持绑定处于活动状态,即使 ssh 断开连接也是如此。此解决方案会继续检查活动的 SSH 客户端,并在断开连接时关闭活动绑定。如果 ssh 客户端在上述设置指定的时间段 x 3(默认值)后仍处于活动状态,则重试(ClientAliveCountMax)
永久解决方案的链接:https://superuser.com/a/742109/1898055