如何正確地為程式開啟 SSH 隧道並隨後將其關閉?

如何正確地為程式開啟 SSH 隧道並隨後將其關閉?

我想執行一個需要 SSH 隧道才能執行的命令(重複開啟 TCP 連線)。隧道存在後,需要再次關閉。我遇到的問題是:

  1. 我可以立即在後台運行該命令,但是我沒有可靠的方法來確保隧道已設定:

    #!/bin/bash
    set -e
    ssh -N -L lport:server:port host &
    trap "kill $!" EXIT
    sleep 1
    my program that connects to localhost:lport
    

    常會出現開啟隧道時間超過1秒的情況。我也可以多花點時間,但是用戶體驗不是很好,而且仍然不可靠。

  2. 我可以在連接開啟時讓 SSH 後台自行運行,但是之後我找不到可靠的方法如何殺死它,因為我不知道後台 SSH 進程的 PID:

    #!/bin/bash
    set -e
    ssh -f -N -L lport:server:port host
    # I'd set up a trap ??? EXIT, but for what?
    my program that connects to localhost:lport
    

    有沒有辦法偵測SSH進程的PID?

或者有其他更好的方法來解決任務?

答案1

https://stackoverflow.com/questions/2241063/bash-script-to-setup-a-temporary-ssh-tunnel包含 Control Socket 和 ExitOnForwardFailure 的答案。

相關內容