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

kbu*_*lds 71 ssh networking port-forwarding

很简单,我知道这以前发生在我身上。在 AU 上找不到好的答案。

我正在运行一个绑定端口的 ssh 会话:

ssh -L 3000:<server_name>:22
Run Code Online (Sandbox Code Playgroud)

我刚刚失去了连接。当我尝试使用相同的命令重新连接时,出现以下错误:

bind: Address already in use
channel_setup_fwd_listener: cannot listen to port: 3000
Run Code Online (Sandbox Code Playgroud)

如何在我的机器上重置 ssh 以允许再次绑定端口?重置本地机器有效。

use*_*407 97

你不能杀死任何使用该端口的东西吗?

 lsof -ti:5901 | xargs kill -9
Run Code Online (Sandbox Code Playgroud)

lsof -ti:5901找到任何使用 port 的东西5901

将整个事情传递kill -9给杀死任何使用 port 的东西5901

替换为您要再次打开的端口。

  • 如果没有使用端口 5901(或您指定的任何本地端口)怎么办? (4认同)
  • 除非程序_完全_无响应,否则没有理由`kill -9`。使用信号 #9 (SIGKILL) 杀死进程会立即终止它,而不会让进程有机会刷新缓冲区、关闭文件句柄和套接字、删除临时文件等,如果您使用 `kill`(默认值),进程_可以_执行所有这些操作到 SIGTERM),然后是 `kill -1`(SIGHUP;挂断)和 `kill -2`(SIGINT;Ctrl+C 发送的内容)如果这不起作用,最后是 `kill -9` **如果没有别的作品**。 (4认同)
  • 即使使用“sudo”,我也看不到任何进程。 (2认同)

Rma*_*ano 13

我想你还有一些东西连接到本地端口 3000。

你可以找到它

netstat -tulpn | grep 3000 
Run Code Online (Sandbox Code Playgroud)

然后处理掉它。例如在我的机器中:

[:~] % 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
Run Code Online (Sandbox Code Playgroud)

正确识别在端口 5900(vnc 服务器)上等待和连接的进程。

另一个有用的命令是

fuser 3000/tcp 
Run Code Online (Sandbox Code Playgroud)

...sudo如果您不拥有打开端口的进程,则可能需要运行所有这些。


kbu*_*lds 5

我能够通过执行以下操作来重新创建和修复它:

  • 打开一些可以列出你的进程的东西 ( ps -ae)
  • 杀死名为sh( kill <proc_number>)的进程

然后重新打开ssh连接

或者,我在以下方面取得了成功:

killall ssh
Run Code Online (Sandbox Code Playgroud)

在本地机器上的终端中