SSH はタイムアウトせず、接続が切断されません。

SSH はタイムアウトせず、接続が切断されません。

Ubuntu 18.04.3 LTSとv21.5でsshコマンドを実行しmobaxterm、カーネル4.9を搭載したLinuxボードに接続しようとしています。

/etc/ssh/sshd_config私はそれを次のように整理しました。

ClientAliveInterval 60
ClientAliveCountMax 0

Linuxボードから。

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"

関連情報