Fish Shellで自動ログアウトを有効にする方法は?

Fish Shellで自動ログアウトを有効にする方法は?

クイックGoogle検索でTMOUTパラメータを設定して自動ログアウト(テキストコンソールの場合)を有効にできることがわかりました。しかし、後でこれがbashシェルでのみ機能することがわかりました。

デフォルトのシェルがFishの場合、自動ログアウトタイマーを設定する方法はありますか?

何が目的ですか?もちろん安全です。 1分間アイドル状態のときにロックするようにしたいと思います。

答え1

Fish自体では直接サポートされていませんが、TMOUTあなたに適したいくつかの選択肢があります。私の2つのアプローチはかなり異なるので、2つの別々の答えに含めます。

まず(代わりに私のものこれは好ましい方法ですが、Fishのバージョンに応じてBash機能に最も近いです。

短い答え:

新しいファイルを作成します~/.config/fish/conf.d/fish_tmout.fish

function start_logout_timer --on-event fish_prompt
    # Allows $last_pid to work in a function
    status job-control full
    if set --query __fish_tmout_pid
        # Stop previous timer
        kill -- -$__fish_tmout_pid
    end
    # Start new timer
    FISH_PID=%self sh -c "sleep 60; kill -HUP $FISH_PID" &
    # Allows logout without warning of background jobs
    disown
    set -gx __fish_tmout_pid $last_pid
end

function stop_logout_timer --on-event fish_preexec
    if set --query __fish_tmout_pid
        kill -- -$__fish_tmout_pid
    end
    set --erase __fish_tmout_pid
end

シェルを再起動すると、自動的にログアウトする前の1分間、シェルには何も表示されません。

互換性:フィッシュ3.2.2以降。 3.0.2以前では動作しないことが知られています。

小さな警告:実行するときps

注:各シェルはグローバル(非ユニバーサル)変数で独自のPIDとタイマーを追跡するため、実行中の複数のシェルインスタンスを処理します。

説明する:

このBash機能を他のフィッシュ機能と一緒に複製してみることができます。ただし、(スタックオーバーフローに関するご意見に応じて)ログアウトすることを忘れた場合に備えて、他のセッションを保護するためにこれを実行したいので、この機能の制限と他のシェルでTMOUT利用可能ですオプションを知っている必要があります。つまりless、端末を制御できる「フルスクリーン」アプリケーション(他の多くのアプリケーションなど)から離れているとvim機能しません。TMOUTBashをアイドル状態にした場合にのみ処理されます。プロンプトに従ってください

繰り返しますが、このアプローチには同じ制限があります。これを念頭に置いて...

Bashマニュアルには何を言うについてTMOUT

対話型シェルでは、この値はデフォルトのプロンプトを実行してから入力行を待つ時間(秒単位)として解釈されます。フル入力行に達しないと、Bashは終了する前にこの時間待機します。

Fishの言葉によると、

  • 2 つの連続プロンプト表示間の時間間隔
  • プロンプト表示とユーザーが対話型コマンドを入力するまでの時間間隔

Fish 関数フックは次のことを処理できます。

  • fish_prompt
  • fish_preexec

したがって、上記のスクリプトは次のようになります。

  • sleepメッセージが表示されると(fish_prompt)自動ログアウトタイマーが開始されます(通過)。
  • fish_prompt次のプロンプトが表示されるか()コマンドが入力されたら()、タイマーを停止します(所有サブプロセスを終了してログオフして)fish_preexec
  • SIGHUPタイマーが終了せずに期限切れになると、シェルからログアウト(通過)

答え2

「非アクティブ状態でのシェル保護」のもう1つのオプションは、問題のサーバーで使用可能またはインストールする権限があると仮定してをtmux使用することです。vlock

これらの項目がインストールされているとし、次の内容を編集して追加します~/.tmux.conf

set -g lock-after-time 60
set -g lock-command vlock

または...

set -g lock-after-time 60
set -g lock-command "tmux kill-session"

これにより、60秒間アクティビティがないと、Tmuxセッション全体(すべてのウィンドウ)がロックまたは終了します。 Tmuxのドキュメントではこれを見ることはできませんが、この場合、非アクティブは「不足しているキーを押す」と定義されているようです。私のテストでは、コマンド(例:a)の画面出力が非tail -fアクティブタイマーを停止しないようです。

などのインタラクティブコマンドを実行するときにも機能するため、代わりTMOUTに安全です。viless

これが本当のセキュリティを維持するためには、tmuxSSHセッションまたは端末で最上位PIDで実行する必要があります。これを行う方法はいくつかあります。

  • SSHクライアントを介してサーバーに接続する場合(この場合が考えられます)、次のように指定しますtmuxRemoteCommandこれを行う方法はクライアント(Puttyなど)によって異なりますが、標準コマンドの場合はToクライアントを実行すると次のようになります。

    > ssh user@server tmux #or
    > ssh -o "RemoteCommand=tmux" user@server
    
  • またはそのサーバーRemoteCommand=tmuxに追加~/.ssh/config

  • または、サーバーに接続した後、または可能であればサーバー内でTmuxを手動で起動したい場合~/.bash_profile(ただし、注意してください)。それからexec tmuxtmuxを使う変える親シェル。終了または切断するとtmuxすぐにログアウトされます(または親プロセスに戻ります)。ただある場合)起動したシェルではありません

関連情報