Networking

X 分鐘後終止 SSH 隧道,即使它仍在使用?

  • July 23, 2009

我正在為一些備份過程設置一些後台 SSH 隧道。但是我擔心 ssh 程序只是坐在那裡。在我的腳本結束時,我殺死了 PID,但是如果我的腳本發生了一些事情並且它沒有完成怎麼辦。我想要一些更強大的東西。

無論如何讓SSH隧道在X秒/分鐘後自行殺死?

目前我開始這樣

ssh -f -N -L 14880:internalserver:3306 gateway.example.com

然後使用 lsof 獲取打開該埠的 PID。

這是之前提出的一種更清潔的方法:

ssh -f -N -L 14880:internalserver:3306 gateway.example.com &
PIDSSH=$!
( sleep 600 ; echo "Timeout." ; kill $PIDSSH ) &
PIDSLEEP=$!
wait $PIDSSH
kill $PIDSLEEP && echo "Session ended before timeout"
wait

但是,您不會從 ssh 獲得錯誤程式碼,但可以安排。

expect 包將 timeout 命令作為其範例之一。你可以通過呼叫它來包裝你的整個腳本。

或類似的東西:

`ssh -f -N -L 14880:internalserver:3306 gateway.example.com &

PID=$!

nohup “sleep 600; kill $PID” &`

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