クライアント(ssh)側で特定の接続に対してsshdなどを設定できますかClientAliveInterval
?ClientAliveCountMax
私はこのようなことを考えていますssh -o ClientAliveInterval=15
(クライアント/ sshオプションに-oのためには明らかに機能しません、または特定の接続にsshdオプションを適用する方法かもしれません)。
ClientAliveInterval
私のユースケースは、リモートポート転送接続の場合、サーバーがより早く接続を閉じることができるように低い値を設定したいということです。目的は、ポートをスケジュールして再接続できない古いsshdセッションを防ぐことです(「エラー:受信ポートへのリモートポート転送に失敗しました」)。
参考までにいいえまたは、接続されたクライアントServerAliveInterval
のみServerAliveCountMax
を制御するため、リモートポート転送には役立ちません。
ベストアンサー1
別の接続が利用可能な場合ただ可能なポートを転送-N
したら、次の解決策を検討してください。
while echo; do sleep 1; done | ssh user@server 'exec bash -c "while read -t 5; do :; done"'
(自分のポート転送を含む)
改行がecho
遠隔端に到達するのを止めると、read -t 5
最終的に失敗し、全体の遠隔ループが終了する。 SSH サーバーは、子プロセスが終了したことを確認し、接続を終了してポートを解放します。
メモ:
read -t
移植性がないため、これを処理するためにコマンドが明示的に呼び出されますbash
。- コマンド
user@server
ソルバーがbash
必要ない場合は(いいえ)exec bash
のみ機能します。"while read -t 5; do :; done"
'exec bash -c …'
read -t 5
とても簡単です。次の概念を実装するコードを開発できます。Interval
そしてCountMax
。
私はサーバーからメッセージを受信する-R
のではなく、実際のリモートポート転送()を使用して自分のラップトップでこのアプローチをテストしました。 Wi-Fiを切断するとビープ音が止まりました。すぐにWi-Fiに再接続すると、ビープ音が鳴り続けました。しかし、数秒遅れて再接続したところ、SSHサーバーが意図的に接続を終了したことがわかったので、ローカルコマンドは終了しました。重要なもの:beep
:
*AliveInterval
で管理されている同じサーバーへの別のSSH接続があり、*AliveCountMax
維持されます。これは、これらのオプションの助けを借りずに私の特定の接続が終了したことを意味します。 Wi-Fiをオフにして長時間待つと、特別な接続のローカル半分を含むほぼすべての接続がこれらのオプションで終了します。例外はリモート半分です。とにかくbash
すでに終了していたので、ずっと前に消えてしまいました。- 再接続できました。まもなく、まったく理解できませんでした
remote port forwarding failed for listen port
。だから私の方法はあなたの問題を効果的に解決できると思います。