没有会话的SSH端口转发

Roo*_*aBe 13 ssh port-forwarding

我正在尝试将我的端口 8085 转发到远程服务器,该端口是用于小型 http 服务器的实时摄像机流端口。

我正在使用的命令是这样的:

ssh -R $rport:dc-bb7925e7:$camport -p 25 server@192.168.178.20
Run Code Online (Sandbox Code Playgroud)

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

所以我尝试在后台使用 ssh:

ssh -Nf -R $rport:dc-bb7925e7:$camport -p 25 server@192.168.178.20
Run Code Online (Sandbox Code Playgroud)

这不起作用,因为似乎连接已关闭。端口转发在脚本中使用,脚本评估 if/then/else 条件,然后执行转发。转发此端口不会停止所有其他脚本。它应该简单地转发端口,然后继续前进,同时保持它打开。

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

gho*_*oti 26

您可以让 SSH 自己处理事情,而不是将活动的 TTY 置于后台。

我的建议是这样的:

ssh -fNT -R $rport:dc-bb7925e7:$camport -p 25 server@192.168.178.20

前三个选项是:

  -f    Requests ssh to go to background just before command execution.
  -N    Do not execute a remote command.
  -T    Disable pseudo-tty allocation.
Run Code Online (Sandbox Code Playgroud)

-f选项是一个实际背景的东西,但-N-T节省您不必为分配的SSH会话,其唯一目的就是把你的隧道资源。

另请注意,其中一些选项可以添加到文件中的自定义配置~/.ssh/config文件中,以防您觉得将更多静态配置放入静态配置文件而不是脚本中更可取。该RemoteForward配置文件选项等同于-R命令行选项。

也可以看看:

  • `-fNT` 选项 *do* 通常有效,我每天都在使用它们。我不太了解您的特定设置,无法解释为什么在 ssh 进程背景本身之后您的隧道可能会关闭。您描述的调试输出似乎不是错误。如果您想[更新您的问题](http://superuser.com/q/827934/113356) 与您的实验的详细结果,它将帮助我们提出更好的答案。 (2认同)
  • 我不得不添加`-o ControlPersist=yes` 以防止连接被关闭。这是因为我的 ~/.ssh/config 中有 `ControlMaster=auto` (2认同)

ern*_*nie 1

-N不是后台,也不是远程命令。你想要这样的东西:

ssh -R $rport:dc-bb7925e7:$camport -p 25 server@192.168.178.20&
Run Code Online (Sandbox Code Playgroud)

请注意尾随的 & 符号,它将将该命令置于背景中。

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

  • 我已经尝试过&。它不转发任何内容 (2认同)