私は ssh を SOCKS5 プロキシとして使用し、個人用サーバーに接続しています。システムがサスペンドされたり、インターネット接続が切断されたりすると、ssh は最終的にタイムアウトになり、手動で再接続する必要があります。インターネット接続が確立されるとすぐに自動的に再接続するようにシステムを構成するにはどうすればよいですか?
答え1
以前は次のような「リバースSSH」スクリプトを使っていました
laddr=*:0
[email protected]
port=some_port
while :; do
t0=$(date +%s)
ssh -R "$laddr:localhost:22" \
-o BatchMode=yes \
-o CheckHostIP=no \
-o ExitOnForwardFailure=yes \
-o ServerAliveInterval=15 \
-o ConnectTimeout=15 \
-p "$port" "$host"
t1=$(date +%s)
sleep "$((60 / (t1 - t0 + 1)))"
done
これは、接続が失われた直後に接続を試行することになっていますが、ssh がすぐに終了した場合は、サーバーに負荷をかけたり、ワイルドループを実行したりしないように、1 分待つ必要があります。
しかし、私はずっと前にそれを「サービス」のようなものに置き換えました。
Systemd などはおそらく同様の機能を提供しているでしょう。