无会话的 SSH 端口转发

无会话的 SSH 端口转发

我正在尝试将我的端口 8085(一个迷你 http 服务器的实时摄像头流端口)转发到远程服务器。

我使用的命令如下:

ssh -R $rport:dc-bb7925e7:$camport -p 25 [email protected]

由于此命令现在是正确的,它确实转发了端口,我可以通过转到 localhost:8085 来查看远程服务器上的实时流,但问题是在客户端上,有一个打开的 TTY 会话,这会阻止所有进一步的脚本运行。

因此我尝试在后台使用 ssh:

ssh -Nf -R $rport:dc-bb7925e7:$camport -p 25 [email protected]

这不起作用,因为看起来好像连接已关闭。端口转发正在脚本中使用,其中脚本评估​​ if/then/else 条件,然后执行转发。转发此端口不应停止所有其他脚本。它应该只是转发端口然后继续,同时保持端口打开。

我做错了什么或者还有其他可以使用的标志吗?

答案1

您可以让 SSH 自行处理所有事情,而不必让活动的 TTY 在后台运行。

我的建议是这样的:

ssh -fNT -R $rport:dc-bb7925e7:$camport -p 25 [email protected]

前三个选项是:

  -f    Requests ssh to go to background just before command execution.
  -N    Do not execute a remote command.
  -T    Disable pseudo-tty allocation.

-f选项实际上是后台操作的选项,但-N它将-T节省您不需要为唯一目的是承载隧道的 SSH 会话分配的资源。

~/.ssh/config还请注意,如果您觉得将更多静态配置放入静态配置文件而不是脚本中会更好,可以将其中一些选项添加到文件中的自定义配置文件中。RemoteForward配置文件选项相当于-R命令行选项。

也可以看看:

答案2

即使在 Mac 上也可以使用

ssh -o ControlPersist=yes -fNT -L 3306:127.0.0.1:3306 example.com

您可以使用 &,它不会在后台冻结,但无论如何登录后它都会自动进入后台,所以不要使用 &。

-f 登录后将其置于后台 -N 禁用自动运行远程用户 shell -T 禁用本地 psudo-tty

-o ControlPersist=yes 可防止与 ControlMaster=auto 结合时关闭连接,而 ControlMaster=auto 恰好位于某些用户的 /install/distros ~/.ssh/config 中

这是一种使用一行或 bash 脚本链接多个 SSH 连接和转发的方法。

答案3

-N不是背景,也不是远程命令。您需要类似以下内容的内容:

ssh -R $rport:dc-bb7925e7:$camport -p 25 [email protected]&

注意结尾的“&”符号,它将使命令处于背景状态。

您可能需要编写一些逻辑以便在完成后返回并关闭 SSH 会话。

相关内容