我知道在启动新的 SSH 会话后Enter
,我可以打开 SSH shell 来启动新隧道(然后~
和最后C
):
>ssh -L 9000:localhost:9000
Forwarding port.
Run Code Online (Sandbox Code Playgroud)
有没有办法在已经 SSH 的情况下以非交互方式完成此操作?
我在这里忽略安全隐患,这是针对本地开发情况,我可能需要打开一条通往将侦听随机端口的服务器的隧道。
-M
您可以通过事先一些准备来做到这一点:使用/ControlMaster
和-S
/将(第一个)ssh 命令设置为主 ssh ControlPath
。通常,ControlMaster功能旨在使用其单个 TCP 连接通过单个 ssh 身份验证运行多个 ssh shell 到同一目标。-O
但您也可以使用ctl_cmd运行其他 ssh 命令来添加额外的转发:
\n\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多路复用请求)。
1号航站楼:
\nssh -S /tmp/exampleinsecuresocket -M remoteuser@remotehost\n
Run Code Online (Sandbox Code Playgroud)\n航站楼2:
\nssh -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
归档时间: |
|
查看次数: |
889 次 |
最近记录: |