Fish Shell에서 자동 로그아웃을 활성화하는 방법은 무엇입니까?

Fish Shell에서 자동 로그아웃을 활성화하는 방법은 무엇입니까?

빠른 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작동하지 않습니다 . TMOUTBash를 유휴 상태로 두었을 때만 처리됩니다.프롬프트를 따르십시오.

다시 말하지만 이 접근 방식에는 동일한 제한 사항이 있습니다. 이를 염두에 두고...

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대안보다 안전 합니다 .viless

이것이 진정한 보안을 유지하려면 tmuxSSH 세션이나 터미널에서 최상위 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 tmuxtmux를 사용하십시오바꾸다상위 쉘. 종료하거나 연결을 끊으면 tmux즉시 로그아웃됩니다(또는 상위 프로세스로 돌아갑니다.오직있는 경우) 시작한 쉘이 아닌

관련 정보