以编程方式在活动会话中打开 SSH 隧道?

luk*_*cki 4 ssh tunnel

我知道在启动新的 SSH 会话Enter,我可以打开 SSH shell 来启动新隧道(然后~和最后C):

>ssh -L 9000:localhost:9000
Forwarding port.
Run Code Online (Sandbox Code Playgroud)

有没有办法在已经 SSH 的情况下以非交互方式完成此操作?

我在这里忽略安全隐患,这是针对本地开发情况,我可能需要打开一条通往将侦听随机端口的服务器的隧道。

A.B*_*A.B 5

-M您可以通过事先一些准备来做到这一点:使用/ControlMaster-S/将(第一个)ssh 命令设置为主 ssh ControlPath。通常,ControlMaster功能旨在使用其单个 TCP 连接通过单个 ssh 身份验证运行多个 ssh shell 到同一目标。-O 但您也可以使用ctl_cmd运行其他 ssh 命令来添加额外的转发:

\n
\n

-O ctl_cmd

\n

控制活动连接复用主进程。当-O指定选项时,ctl_cmd参数将解释并传递到主进程。有效命令为:\xe2\x80\x9ccheck\xe2\x80\x9d(检查主\n进程是否正在运行)、\xe2\x80\x9cforward\xe2\x80\x9d(不执行命令的请求转发)、\xe2 \x80\x9ccancel\xe2\x80\x9d(取消转发)、\xe2\x80\x9cexit\xe2\x80\x9d(请求master\n退出)和\xe2\x80\x9cstop\xe2\x80\x9d(请求主站停止接受进一步的\n多路复用请求)。

\n
\n

1号航站楼:

\n
ssh -S /tmp/exampleinsecuresocket -M remoteuser@remotehost\n
Run Code Online (Sandbox Code Playgroud)\n

航站楼2:

\n
ssh -S /tmp/exampleinsecuresocket -O forward -L 9000:localhost:9000 remoteuser@remotehost\n
Run Code Online (Sandbox Code Playgroud)\n

请注意,终端 2 的 ssh 将立即退出并且不要求身份验证,即使通常应该如此:它没有与远程主机进行任何连接,只是告诉已经在终端 1 中运行的 ssh 执行LocalForward。在 Terminal1 中运行的 ssh 现在有一个额外的端口转发。当然,这是非交互式的,可以在脚本中完成。

\n

通过充分使用参数(例如手册中所述的ControlPath-o ControlMaster auto选项的正确方案和足够的令牌) ,可以自动执行任何目的地的初始设置。~/.ssh/config

\n