ssh -L(错误:绑定:地址已被使用)

ssh -L(错误:绑定:地址已被使用)

很简单,我知道我以前也遇到过这种情况。在 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

相关内容