关闭/终止 ssh 本地端口转发连接 | 没有为“-O”命令错误指定 ControlPath

关闭/终止 ssh 本地端口转发连接 | 没有为“-O”命令错误指定 ControlPath

我有一个 sshfs/fuse 挂载文件夹和后台 2 个本地端口转发。

摘自这篇文章:

如何清除本地 ssh 端口以转发到远程?

使用此命令,我只能看到我挂载的 sshfs/fuse 文件夹,而看不到本地端口转发连接。

ps -af |grep [s]sh

查看本地端口转发连接过程:

ps -x |grep "[s]sh -fN"

或者来自这篇文章:

在 Linux 中查找使用某个端口的进程

lsof -i tcp:[PORT]

我可以使用以下命令终止本地端口转发连接的 1 个进程:

kill <id>

当我尝试使用以下命令关闭/终止该进程时:

ssh -O cancel -L [PORT]:[IP]:[PORT] [IP]

我收到如下错误信息:

No ControlPath specified for "-O" command

摘自这篇文章:

如何删除 SSH 转发端口

这个命令也不起作用:

pkill -f "ssh -f -N [REMOTE_IP]"

ssh -O exit [REMOTE_IP]

摘自这篇文章:

如何删除本地 ssh 隧道

ssh -o ControlPath=$socket -O check

我收到

command-line line 0: Missing argument.

来自帖子:

如何判断 ssh ControlMaster 连接是否正在使用

我想关闭/终止某个端口的指定连接而不是全部,例如,如果我在具有不同端口的主机上建立了 3 个连接,则使用 ssh 命令而不是终止进程,例如:

ssh -O cancel -L ....

或其他 ssh 命令。

我该如何解决这个问题?我的错误在哪里?

ssh -O cancel -L [PORT]:[IP]:[PORT] [IP]

答案1

据我所知,取消端口转发时需要识别控制路径。

因此,当您创建端口转发时,您需要指定一个控制路径,例如 /tmp/mysshcontrolpath,即

ssh -o ControlMaster=auto -o ControlPath=/tmp/mysshcontrolpath -N -R [PORT]:[IP]:[PORT] [IP]

...然后,当您想要停止端口转发时,您将使用完全相同的方法,但要添加“-O exit”,即

ssh -o ControlMaster=auto -o ControlPath=/tmp/mysshcontrolpath -O exit -N -R [PORT]:[IP]:[PORT] [IP]

...然后您应该收到“退出请求已发送”的响应。

此外,我在创建端口转发时总是使用 ExitOnForwardFailure 选项,以便在尝试失败时它不会挂起,即

ssh -o ExitOnForwardFailure=yes -o ControlMaster=auto -o ControlPath=/tmp/mysshcontrolpath -N -R [PORT]:[IP]:[PORT] [IP]

我知道有些版本的 Linux 带有在 ~/.ssh/config 文件中预先指定的控制路径,因此在创建端口转发时无需指定控制路径。您可以在任何版本的 Linux 中创建此配置文件,如前所述这里

希望这能为您提供一些线索,帮助您解决问题......

答案2

如果你知道进程的端口(这里是 8080),只需使用

kill $(lsof -t -i:8080)

在哪里

lsof -i:8080

为您提供所有 PID

相关内容