
我想執行一個需要 SSH 隧道才能執行的命令(重複開啟 TCP 連線)。隧道存在後,需要再次關閉。我遇到的問題是:
我可以立即在後台運行該命令,但是我沒有可靠的方法來確保隧道已設定:
#!/bin/bash set -e ssh -N -L lport:server:port host & trap "kill $!" EXIT sleep 1 my program that connects to localhost:lport
常會出現開啟隧道時間超過1秒的情況。我也可以多花點時間,但是用戶體驗不是很好,而且仍然不可靠。
我可以在連接開啟時讓 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 的答案。