Ssh
以程式方式在活動會話中打開 SSH 隧道?
我知道在開始一個新的 SSH 會話後,我可以打開 SSH shell 來啟動一個新的隧道(
Enter
然後是~
最後C
):>ssh -L 9000:localhost:9000 Forwarding port.
有沒有辦法以非互動式方式進行,而已經 SSH 進入?
我在這裡忽略了安全隱患,這是針對本地開發情況,我可能需要打開通往將在隨機埠上偵聽的伺服器的隧道。
-M
您可以這樣做,事先做好一些準備:使用/ControlMaster
和-S
/將(第一個)ssh 命令設置為主 sshControlPath
。通常,ControlMaster功能旨在通過使用其單個 TCP 連接的單個 ssh 身份驗證將多個 ssh shell 執行到同一目標。但是您也可以使用-O
ctl_cmd執行其他 ssh 命令來添加額外的轉發:
-O ctl_cmd
控制一個活動的連接多路復用主程序。當
-O
指定選項時,ctl_cmd參數被解釋並傳遞給主程序。有效命令有:“check”(檢查主程序是否正在執行)、“forward”(請求轉發而不執行命令)、“cancel”(取消轉發)、“exit”(請求主程序退出)和“stop” ”(請求主設備停止接受進一步的多路復用請求)。1號航站樓:
ssh -S /tmp/exampleinsecuresocket -M remoteuser@remotehost
終端2:
ssh -S /tmp/exampleinsecuresocket -O forward -L 9000:localhost:9000 remoteuser@remotehost
請注意,終端 2 的 ssh 將立即退出並且不會要求身份驗證,即使它通常應該是預期的:它沒有與remotehost進行任何連接,只是告訴已經在終端 1 中執行的 ssh 執行LocalForward。在終端 1 中執行的 ssh 現在有一個額外的埠轉發。當然,這是非互動式的,可以在腳本中完成。
如手冊中所述,通過充分使用諸如ControlPath
-o ControlMaster auto
選項之類的參數以及具有足夠標記的正確方案,可以自動執行任何目的地的初始設置。~/.ssh/config