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"