OpenSSH의 기본 유휴 시간 제한은 무엇입니까?


25

이 간단한 질문에 대한 답변을 찾지 못하는 것 같습니다.

CentOS 6.5 (OpenSSH 5.3p1-94.el6)의 기본 설치에서 유휴 시간이 지난 후 사용자의 SSH 세션이 종료됩니까? 유휴 시간 초과를 늘리려면 다음을 설정할 수 있지만 기본적으로 주석 처리됩니다.

$ grep -i alive /etc/ssh/sshd_config
#TCPKeepAlive yes
#ClientAliveInterval 0
#ClientAliveCountMax 3

또한 현재 sshd설정 목록을 덤프하는 명령이 있습니까? 에 아무것도 표시되지 않습니다 man sshd.


3
시간 초과 후 일부 쉘이 종료되도록 설정할 수 있습니다. ssh 세션이 종료됩니다. TMOUT 환경 변수가 설정되어 있는지 확인하십시오.
Kenster

답변:


23

주석 처리 된 행은 sshd_config일반적으로 기본값을 표시합니다. 이것은 귀하의 질문에 모든 줄이있는 경우입니다. sshd_config맨 페이지 에서이를 확인할 수 있습니다 . 관련 스 니펫은 다음과 같습니다.

TCPKeepAlive

      시스템이 다른쪽에 TCP keepalive 메시지를 보내야하는지 여부를 지정합니다. 전송 된 경우 연결이 끊어 지거나 시스템 중 하나의 충돌이 올바르게 감지됩니다. 그러나 이것은 경로가 일시적으로 다운되면 연결이 끊어지고 일부 사람들은 성가신 것을 알게됩니다. 반면, TCP 연결이 전송되지 않으면 세션이 서버에서 무기한 중단되어 "고스트"사용자가 남게되고 서버 리소스가 소비 될 수 있습니다.

      기본값은 "yes"(TCP keepalive 메시지를 보내기위한)이며 네트워크가 다운되거나 클라이언트 호스트가 충돌하는지 서버가 알 수 있습니다. 이렇게하면 세션이 무한정 중단되지 않습니다.

      TCP keepalive 메시지를 비활성화하려면 값을 "no"로 설정해야합니다.

      이 옵션은 이전에이라고했습니다 KeepAlive.

ClientAliveCountMax

      sshd (8) 가 클라이언트로부터 메시지를 다시받지 않고 전송 될 수있는 클라이언트 활성 메시지 수 (아래 참조)를 설정합니다 . 클라이언트 활성 메시지가 전송되는 동안이 임계 값에 도달하면 sshd가 클라이언트 연결을 끊고 세션을 종료합니다. 클라이언트 활성 메시지의 사용은 다음과 매우 다르다는 점에 유의해야합니다.TCPKeepAlive (이하)(위). 클라이언트 활성 메시지는 암호화 된 채널을 통해 전송되므로 스푸핑 할 수 없습니다. 에 의해 활성화 된 TCP keepalive 옵션 TCPKeepAlive은 스푸핑 가능합니다. 클라이언트 작동 메커니즘은 클라이언트 또는 서버가 연결이 비활성화 된시기를 아는 것에 의존 할 때 유용합니다.

      기본값은 3입니다 ClientAliveInterval(아래 참조)가 15로 설정되어 ClientAliveCountMax있고 기본값을 그대로두면 약 45 초 후에 응답하지 않는 SSH 클라이언트의 연결이 끊어집니다. 이 옵션은 프로토콜 버전 2에만 적용됩니다.

ClientAliveInterval

      클라이언트로부터 데이터가 수신되지 않은 경우 sshd (8) 는 클라이언트로부터 응답을 요청하기 위해 암호화 된 채널을 통해 메시지를 보내는 시간 초과 간격을 초 단위로 설정합니다 . 기본값은 0이며, 이러한 메시지가 클라이언트로 전송되지 않음을 나타냅니다. 이 옵션은 프로토콜 버전 2에만 적용됩니다.


1
틀린 경우 수정하되, 나와 컴퓨터 사이에 방화벽이없는 경우 (기본 구성 포함) 연결이 끊어지지 않습니까? 방화벽이 60 분 후에 유휴 TCP 연결을 끊으므로 유휴 연결 종료가 발생합니다. OpenSSH 자체가 명시 적으로 세션을 닫는 지 확인하고 싶었습니다. 대답은 아니요, openssh는 유휴 연결을 명시 적으로 닫지 않지만 방화벽은 일반적 으로 닫습니다 . 답변에 언급 된 설정은 실제로 연결을 유지하거나 삭제 된 세션을 올바르게 종료하는 데 도움이됩니다.
Banjer

2
인용 된 텍스트는 ClientAliveInterval의 기본값이 0이며 연결이 열려있는 시간 간격을 정의하지 않음을 나타냅니다. 그러나 시간 간격은 기본적으로 유한 한 값이라는 것을 알고 있습니다. 따라서 기본적으로 연결이 열려있는 시간을 설정하는 다른 매개 변수 가 있어야합니다 . 위의 분석이 정확하다면 서버와 클라이언트 모두 openssh를 실행하는 Linux 시스템이고 모두 기본값을 사용한다고 가정하십시오. 이 경우 어느 쪽이 기본값을 설정합니까? 그 값은 무엇이며 어디에 설정되어 있습니까?
벤 크로 웰

2
@BenCrowell 그리고 우리는 시간 간격이 기본적으로 유한 한 값을 가지고 있다는 것을 알고 있습니다. 어떤 시간 간격 을 어떻게 알 수 있습니까?
Piotr Dobrogost


6

OpenSSH는 한동안 유휴 상태 인 쉘 세션을 종료하지 않습니다. 이것은 OpenSSH가하는 것이 아닙니다. 유휴 쉘 세션 종료는 OpenSSH 구성과 관련이 없습니다.

표시하는 설정은 연결이 끊어 질 때의 시간 종료와 관련이 있으며 원격 호스트의 쉘 및 사용자가 수행중인 작업과 관련이 없습니다.

유휴 시간이 지나면 원격 호스트의 셸이 종료되거나 다른 프로세스에 의해 종료 될 수 있지만 이는 서버 및 SSH 클라이언트의 SSH 서비스 구성과 관련이 없습니다.

관련 :


sshd구성 을 덤프하려면 "확장 테스트 모드"를 루트로 사용하십시오.

sshd -T

이것은에 설명되어 있습니다 매뉴얼 (보고 여기 오픈 BSD에) :sshd(8)OpenSSH_7.7, LibreSSL 2.7.2

-T

확장 테스트 모드. 구성 파일의 유효성을 확인하고 유효 구성을 stdout으로 출력 한 다음 종료하십시오 . 선택적으로 일치 규칙은 하나 이상의 -C옵션을 사용하여 연결 매개 변수를 지정하여 적용될 수 있습니다.

이 옵션은 sshd2008 년 OpenSSH 5.1 / 5.1p1에 추가되었습니다 .


3

일정 기간 동안 작업이 없으면 SSH 연결을 닫아야하는 경우 셸 자체에서 시간 초과 변수를 제공합니다.

bash의 경우 :

TMOUT : 0보다 큰 값으로 설정하면 TMOUT은 읽기 내장의 기본 시간 초과로 처리됩니다. 입력이 터미널에서 올 때 TMOUT 초 후에 입력이 도착하지 않으면 select 명령이 종료됩니다. 대화식 쉘에서 값은 기본 프롬프트를 발행 한 후 입력을 기다리는 시간 (초)으로 해석됩니다. 입력이 도착하지 않으면 해당 시간 (초) 동안 기다린 후 배쉬가 종료됩니다.

실행 TMOUT=10하여 이를 테스트 하고 연결을 닫을 때까지 10 초 동안 기다리십시오.

tcsh의 경우 :

지정된 시간 (분) 동안 활동이 없으면 쉘에서 로그 아웃하거나 잠금하도록 autologout 쉘 변수를 설정할 수 있습니다.

tcsh에서 시간 초과를 10 분으로 설정하는 구문 은 set autologout=10입니다. 원래 csh에서는 작동하지 않습니다.


-2

모든 사람이 제한 시간을 10 초로 설정하려면 서버 구성 (sshd_config)에 대해 다음을 수행하십시오.

ClientAliveInterval 10
ClientAliveCountMax 0

로컬 클라이언트의 제한 시간을 10 초로 설정하려면 클라이언트 구성 (ssh_config)에 대해 다음을 수행하십시오.

ServerAliveInterval 10
ServerAliveCountMax 0

AliveCountMax 매개 변수가 0이 아닌 경우 연결 문제가없는 한 서버가 타이머 재설정에 응답하므로 작동하지 않을 수 있습니다. 디버깅이 켜진 상태에서 ssh 클라이언트를 실행하여이를 확인할 수 있습니다.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.