アイドルログインセッション(コンソール、SSHなど)を終了する効率的な方法を探しています。これを行う方法に対する多くの回答がインターネットにありますが、すべて非常に基本的なユースケースのみを扱っています。
要件は次のとおりです。
- この設定はすべてのログインセッションに適用する必要があります(ログインセッションはpamセッションとして定義されています)。
- ユーザーは上書きできません。
- 欺くのは難しいか不可能でなければなりません。残念ながら、これは主観的な要件です。ユーザーがキーボードに水を飲む鳥を置く場合、警戒する価値はありません。ただし、SSHクライアント構成またはシェル構成ファイルからタイムアウトを効果的に削除する設定を設定できる場合は、これを回避する必要があります。
- アクティビティは、SSHストリーム(暗号化前)のすべてのIOとして定義されます。最悪の場合でも、TTY / STDIN / STDOUT / STDERRでIOとして定義できます。 SSHトンネルなどのものは、状態をアクティブに保つ必要があるため、電子が優先されます。ただし、制限時間(時間単位)が十分に高い場合、後者は許可されます。
動作しない解決策:
クローンジョブの解析w
/who
出力:
すべてのセッションがこのリストに表示されるわけではないため、この方法は機能しません。たとえば、実行すると、ssh foo.example.com bash
セッションはリストに表示されません。プロセスを実行したり、ssh -N foo.example.com
バックグラウンドで実行したりすることもできますが、ControlMaster
表示されません。
使用& sshd_config
:ClientAliveInterval
ClientAliveCountMax
これは私がよく見ているもう一つの提案ですが、アイドル接続を切断することはまったく意図されていないので動作しません。これらの設定は、アイドル接続ではなく、切断された接続を検出して終了するように設計されています。これらの設定は、クライアント側で
設定すると簡単に無視できます。ServerAliveInterval
シェルTMOUT
変数
これはシェルを必要とし、ユーザーが簡単に無視できるため、非常に弱いソリューションです。