クイック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
機能しません。TMOUT
Bashをアイドル状態にした場合にのみ処理されます。プロンプトに従ってください。
繰り返しますが、このアプローチには同じ制限があります。これを念頭に置いて...
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
に安全です。vi
less
これが本当のセキュリティを維持するためには、tmux
SSHセッションまたは端末で最上位PIDで実行する必要があります。これを行う方法はいくつかあります。
SSHクライアントを介してサーバーに接続する場合(この場合が考えられます)、次のように指定します
tmux
。RemoteCommand
これを行う方法はクライアント(Puttyなど)によって異なりますが、標準コマンドの場合はToクライアントを実行すると次のようになります。> ssh user@server tmux #or > ssh -o "RemoteCommand=tmux" user@server
またはそのサーバー
RemoteCommand=tmux
に追加~/.ssh/config
または、サーバーに接続した後、または可能であればサーバー内でTmuxを手動で起動したい場合
~/.bash_profile
(ただし、注意してください)。それからexec tmux
tmuxを使う変える親シェル。終了または切断するとtmux
すぐにログアウトされます(または親プロセスに戻ります)。ただある場合)起動したシェルではありません