유휴 로그인 세션(콘솔, 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
변수
이는 쉘이 필요하고 사용자가 쉽게 무시할 수 있으므로 매우 약한 솔루션입니다.