SSH는 시간 초과되지 않고 연결이 끊어지지 않습니다.

SSH는 시간 초과되지 않고 연결이 끊어지지 않습니다.

Ubuntu 18.04.3 LTS 및 v21.5에서 ssh 명령을 실행 mobaxterm하고 커널 4.9가 있는 Linux 보드에 연결하려고 합니다.

/etc/ssh/sshd_config나는 그것을 다음과 같이 구성했다 .

ClientAliveInterval 60
ClientAliveCountMax 0

리눅스 보드에서.

60초 후에는 openssh 버전 8.0에서만 연결이 끊어지고 버전 8.2, 8.5, 8.7, 8.9에서는 연결이 끊어지지 않습니다. 8.2버전의 버그인가요? 8.5, 8.7. 8.9?

답변1

ClientAliveInterval /etc/ssh/sshd_config에 지정된 시간 이후

어떤 값을 구성했습니까?sshd 맨페이지조항은 다음과 같습니다:

ClientAliveInterval
Sets a timeout interval in seconds after which if no data has been 
received from the client, sshd(8) will send a message through the
encrypted channel to request a response from the client. The default is 0,
indicating that these messages will not be sent to the client.
This option applies to protocol version 2 only.

연결 시간이 초과되도록 하려면 기본값을 사용하는 것이 좋습니다.

세션 유지는 다음과 같습니다.또한 구성됨연결 중고객한쪽 ~/.ssh/config:

ServerAliveInterval
Sets a timeout interval in seconds after which if no data has been
received from the server, ssh(1) will send a message through the
encrypted channel to request a response from the server. The default is 0,
indicating that these messages will not be sent to the server.
This option applies to protocol version 2 only.

나 같은원하지 않는다SSH 세션 시간이 초과되어 다음이 발생합니다 ~/.ssh/config.

Host *
  ServerAliveInterval 15
  ServerAliveCountMax 3

관련 주제

답변2

이 파일(Openssh v8.6p1)의 매뉴얼 페이지는 sshd_config설명 끝에 다음과 같이 나와 있습니다 ClientAliveCountMax.

 Setting a zero ClientAliveCountMax disables connection termination.

설정 ClientAliveCountMax 0으로 인해 연결이 끊어지지 않습니다. 기본값 3(Raul이 이미 제안한 대로)을 시도하거나 적어도 1.

답변3

아마도 bash 스크립트를 사용하여 유휴 SSH 연결을 종료하고 이 bash 스크립트가 매분마다 crontab에서 실행되도록 설정할 수 있습니다. SSH 연결을 종료하려면 아래 값을 원하는 유휴 시간으로 변경하세요. 1800초 = 30분

#!/bin/bash
# Get the idle information from "w" command#
idle_info=$(w)

# Loop through each line of idle information#
while IFS= read -r line; do
  # Extract the username, terminal, and idle time from the line
  username=$(echo "$line" | awk '{print $1}')
  terminal=$(echo "$line" | awk '{print $2}')
  idle_time=$(echo "$line" | awk '{print $5}' | sed 's/[^0-9.]//g')

  # Check if the terminal is an SSH session and the idle time exceeds 30 minutes (1800 seconds)#
  if [[ "$terminal" =~ ^pts/ ]] && (( $(echo "$idle_time > 1800" | bc -l) )); then
    # Terminate the SSH session#
    sudo pkill -9 -t "$terminal"
    echo "Killed SSH session for user $username on terminal $terminal (Idle for $idle_time seconds)"
  fi
done <<< "$idle_info"

관련 정보