Networking
X 分鐘後終止 SSH 隧道,即使它仍在使用?
我正在為一些備份過程設置一些後台 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” &`