Ssh

以程式方式在活動會話中打開 SSH 隧道?

  • November 8, 2020

我知道開始一個新的 SSH 會話後,我可以打開 SSH shell 來啟動一個新的隧道(Enter然後是~最後C):

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

有沒有辦法以非互動式方式進行,而已經 SSH 進入?

我在這裡忽略了安全隱患,這是針對本地開發情況,我可能需要打開通往將在隨機埠上偵聽的伺服器的隧道。

-M您可以這樣做,事先做好一些準備:使用/ControlMaster-S/將(第一個)ssh 命令設置為主 ssh ControlPath。通常,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

引用自:https://serverfault.com/questions/1041672