빠른 Google 검색을 통해 TMOUT 매개변수를 설정하여 자동 로그아웃(텍스트 콘솔의 경우)을 활성화할 수 있음이 나타났습니다. 그러나 나중에 이것이 bash 쉘에서만 작동한다는 것을 알게 되었습니다.
내 기본 쉘이 Fish인 경우 자동 로그아웃 타이머를 설정하는 방법이 있습니까?
무슨 목적인가요? 물론 안전합니다. 1분 동안 유휴 상태일 때 잠기도록 하고 싶습니다.
답변1
Fish 자체에서 직접적으로 지원되지는 않지만 TMOUT
귀하에게 적합한 몇 가지 대안이 있습니다. 내 두 가지 접근 방식이 상당히 다르기 때문에 두 가지 별도 답변에 포함하겠습니다.
먼저 (대신내 거선호되는 방법이지만 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분 동안 셸에 아무 활동도 표시되지 않습니다.
호환성: Fish 3.2.2 이상. 3.0.2 이하 버전에서는 작동하지 않는 것으로 알려져 있습니다.
작은 경고: 실행할 때 ps
.
참고: 각 쉘은 전역(비유니버설) 변수에서 자체 PID와 타이머를 추적하므로 이는 실행 중인 여러 쉘 인스턴스를 처리합니다.
설명하다:
이 Bash 기능을 다른 Fish 기능과 함께 복제해 볼 수 있습니다. 그러나 (스택 오버플로에 대한 귀하의 의견에 따라) 로그아웃하는 것을 잊었을 경우에 대비하여 주변의 다른 세션을 보호하기 위해 이 작업을 수행하기를 원하므로 TMOUT
이 기능의 제한 사항과 다른 셸에서 사용할 수 있는 옵션을 알고 있어야 합니다. 즉 less
, 터미널을 제어할 수 있는 "전체 화면" 응용 프로그램(예: 다른 많은 응용 프로그램)에서 떨어져 있으면 vim
작동하지 않습니다 . TMOUT
Bash를 유휴 상태로 두었을 때만 처리됩니다.프롬프트를 따르십시오.
다시 말하지만 이 접근 방식에는 동일한 제한 사항이 있습니다. 이를 염두에 두고...
Bash 매뉴얼에는무슨 말을하는에 대한 TMOUT
:
대화형 셸에서 이 값은 기본 프롬프트를 실행한 후 입력 줄을 기다리는 시간(초)으로 해석됩니다. 전체 입력 줄에 도달하지 않으면 Bash는 종료되기 전에 이 시간 동안 대기합니다.
Fish의 말에 따르면 다음과 같습니다.
- 두 개의 연속 프롬프트 표시 사이의 시간 간격
- 프롬프트 표시와 사용자가 대화형 명령을 입력하는 사이의 시간 간격
Fish 함수 후크는 다음을 처리할 수 있습니다.
fish_prompt
fish_preexec
따라서 위의 스크립트는 다음과 같습니다.
sleep
메시지가 표시되면(fish_prompt
) 자동 로그아웃 타이머가 시작됩니다(통과).fish_prompt
다음 프롬프트가 표시되거나( ) 명령이 입력되면( ) 타이머를 중지합니다(소유 하위 프로세스를 종료하고 로그오프하여)fish_preexec
.SIGHUP
타이머가 종료되지 않고 만료되면 쉘에서 로그아웃(통과)
답변2
"비활성 상태에서 쉘 보호"에 대한 또 다른 옵션은 문제의 서버에서 사용할 수 있거나 설치할 권한이 있다고 가정하고 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
즉시 로그아웃됩니다(또는 상위 프로세스로 돌아갑니다.오직있는 경우) 시작한 쉘이 아닌