以编程方式在ControlMaster SSH会话上添加端口转发


9

我刚刚发现了OpenSSH的ControlMaster / ControlPath功能,该功能允许您使用单个SSH连接来运行多个终端。

由于我经常使用SSH来使用端口转发来获取经过加密和身份验证的VNC会话,因此我立即意识到您无法将端口转发添加到已建立连接的远程服务器上。糟透了

有时,后来我发现您可以通过在正在运行的SSH终端会话中键入〜C来规避此限制。这将打开一个命令行,允许您添加或删除端口转发。

现在的问题是:如何在使用ControlMaster / ControlPath功能的现有SSH会话上添加端口转发,而无需访问该SSH会话内的终端会话。我需要启用它来启动脚本,该脚本启动安全的隧道VNC连接,以便我添加并稍后删除其端口转发。

(我知道我可以使用终端多路复用器,例如GNU Screen或tmux,实际上我已经在这样做了。但是出于服务器的原因,我喜欢只使用一个SSH会话的想法。)


1
如果您找到一种解决方法,我会感到困惑,但我怀疑您不会。以编程方式控制您实际上并不参与的SSH会话的属性似乎是一个巨大的安全问题。
卡莱布

1
废话!如何以编程方式控制SSH会话的属性会带来巨大的安全性问题?解决方案确实非常简单:serverfault.com/a/340361/93109
aculich 2011年

现在的问题是仅询问有关添加端口转发的问题,因此它更好地匹配了已接受的答案。我在这里问了一个有关如何删除它们的问题:serverfault.com/q/457295/50950
aef

Answers:


9

实际上,这很简单。只需将ctl_cmd添加-O forward到现有命令中,即可:

ssh -M -L5555:localhost:22 remotehost

变成:

ssh -O forward -M -L5555:localhost:22 remotehost

ssh手册页讨论-O ctl_cmd的选项:

-O ctl_cmd
        Control an active connection multiplexing master process.  When the -O option is
        specified, the ctl_cmd argument is interpreted and passed to the master process.
        Valid commands are: “check” (check that the master process is running), “forward”
        (request forwardings without command execution), “exit” (request the master to
        exit), and “stop” (request the master to stop accepting further multiplexing
        requests).

当然,这假定您已ControlMaster yes~/ssh/config文件中或-M命令行中启用了该功能。


1
您能否在此处尝试回答相关问题:serverfault.com/q/457295/50950
aef
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.