如何删除 SSH 转发端口

use*_*654 74 ssh port-forwarding

我曾经ssh -L 10002:192.168.0.30:10002 192.168.1.135建立端口转发,但现在我需要删除它。

我该怎么做呢?

zpo*_*pon 77

如果您使用的是 Linux,您可以通过以下方式终止进程:

ps aux | grep ssh
Run Code Online (Sandbox Code Playgroud)

然后使用

kill <id>
Run Code Online (Sandbox Code Playgroud)

杀死进程。

如果kill命令不成功你可以试试

kill -9 <id>
Run Code Online (Sandbox Code Playgroud)

  • 不。不。不。拜托,拜托,请不要*使用`kill -9`,直到你尝试过`kill`。许多进程将具有信号处理程序,它们将清理它们对资源的使用、干净地关闭连接和其他关闭前任务。如果你用 -9 杀死,进程会立即终止而不进行清理。大多数情况下,没有 -9 的杀戮*将*有效。 (39认同)
  • 无缘无故的‘kill -9’就像用霰弹枪杀死一只蚊子。:) (25认同)
  • 我通常做一个单行`pgrep ssh | xargs 杀死`。确实不要无缘无故地使用 `-9` (4认同)
  • @GabLeRoux 假设您只有一个 `ssh` 命令,或者您正在运行的所有 `ssh` 命令都可以杀死。这不是一个好的一般假设。 (4认同)
  • @Avamander 我一直连接到多个远程服务器上的多个 `ssh` 实例,其中一些没有我的直接积极参与。例如,当我访问远程缓冲区时,Emacs TRAMP 模式会在后台打开一个 `ssh` 连接。有些人使用用户空间文件系统做类似的事情。这并不罕见。事实上,我会假设单个用户、单个 `ssh` 实例是少数边缘用例。如果它对你有用,对你有好处,但这不是好的一般建议。 (3认同)

a3n*_*3nm 50

使用 ssh 多路复用时,杀死 ssh 进程通常是不可取的(它会杀死与该主机的所有打开的连接),并且您无法轻松访问转义,因为“转义不可用于多路复用会话”。正确的方法是运行您想要取消的转发命令的模拟,但添加-O cancel. 例如:

ssh -O cancel -L 10002:192.168.0.30:10002 192.168.1.135
Run Code Online (Sandbox Code Playgroud)

这将禁用此端口转发而不终止会话。同样,这仅在 ssh 多路复用用于连接到 192.168.1.135 时才有效

  • 这是一个最好的解决方案。要杀死主人,只需运行`ssh -O exit 192.168.1.135`。 (6认同)

cam*_*ous 23

如何在已经运行的 SSH 会话中取消转发的端口:

  1. ~+ C(波浪号 + 大写 C)
  2. 类型 -KL port
  3. 按 Enter

你应该看到这个:

ssh> -KL 10002
Canceled forwarding.
Run Code Online (Sandbox Code Playgroud)


exh*_*uma 13

您可以通过键入~C(大写“C”)进入交互式控制台。这使您可以动态添加和删除端口转发(以及其他一些内容)。

这个序列必须紧跟回车/换行符之后。所以有疑问,只需输入Enter~C(按顺序)。

如果您没有看到字符出现在控制台上,那么您就做对了 :)

您现在应该会看到一个ssh>提示。

要删除端口,只需输入-KL 10002后跟Enter10002您的转发端口在哪里)。

反向 - 添加一个新的前向 - 可以这样完成(从开始到结束):

Enter~C

ssh> -L 10002:192.168.0.30:10002
Run Code Online (Sandbox Code Playgroud)

Enter

  • 如果您_不_复用连接,那么这是正确的答案。如果是,您将被退回,并显示“~C escape not available to MultiplexedSession”。如果是这样,请参阅 a3nm 的优秀答案。 (2认同)

Jim*_*man 12

您可以使用“转义键”(通常是 ~)后跟 C 来获取连接的 cli。您可以从那里删除隧道而无需断开连接。

  • 当您处于 CLI 模式时,您可以提供帮助。-KL 是-L 的反面,-KR 是-R 的反面,-KD 是-D 的反面。执行“转义键”(~)后跟 # 会显示您的隧道。 (10认同)