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

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

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

>ssh -L 9000:localhost:9000
Forwarding port.

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

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

答案1

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

-O ctl_cmd

控制一个活跃的连接复用主进程。当-O 指定该选项时,命令参数被解释并传递给主进程有效命令为:“check”(检查主进程是否正在运行),“forward”(请求转发,但不执行命令)、“取消”(取消转发)、“退出”(请求主机退出)和“停止”(请求主机停止接受进一步的多路复用请求)。

1号航站楼:

ssh -S /tmp/exampleinsecuresocket -M remoteuser@remotehost

航站楼2:

ssh -S /tmp/exampleinsecuresocket -O forward -L 9000:localhost:9000 remoteuser@remotehost

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

通过适当使用参数-o ControlMaster auto,以及正确的方案和足够的令牌控制路径~/.ssh/config选项如手册中所述,可以自动执行任何目的地的初始设置。

相关内容