모든 SSH 세션이 1분 이상 유휴 상태이면 머신을 종료합니다.

모든 SSH 세션이 1분 이상 유휴 상태이면 머신을 종료합니다.

유휴(Idle)는 실행 중인 포그라운드 프로그램이 없고 터미널이 사용자 입력을 기다리고 있지만 사용자가 아무런 입력도 하지 않았음을 의미합니다.

실제로 나의 궁극적인 목표는 모든 SSH세션이 유휴 상태일 때 종료하고 x-window또한 유휴 상태일 때 종료하는 것입니다.
자유 시간은 를 x-window사용하여 결정할 수 있습니다 xprintidle. 이제 모든 SSH 세션이 무료인지 확인하면 됩니다.
나는 Linux에서 컴퓨터가 유휴 상태인지 확인하기 위해 여러 가지 방법을 찾았지만 대부분은 x-window데스크톱이 유휴 상태인지 여부를 기반으로 합니다.

답변1

존재하다/etc/ssh/sshd_config

# default values
ClientAliveInterval                        0
ClientAliveCountMax                        3

ClientAliveInterval600{초} 및 0으로 설정하면 ClientAliveCountMax10분 동안 유휴 상태인 모든 SSH 세션이 닫힙니다. 이 메커니즘을 사용하면 모든 SSH 세션을 가질 수 있습니다.깨끗하게선택한 특정 시간 초과 또는 유휴 기간이 지나면 종료됩니다. 그런 다음 SSH 세션이나 프로세스가 존재하는지 확인하고 존재하지 않으면 닫습니다.

안전을 보장하기 위해 사용하기 전에 이 두 개의 SSH 매개변수를 읽어 보는 것이 좋습니다.

https://man.openbsd.org/sshd_config

sshd_config의 `ServerAliveInterval` 및 `ClientAliveInterval` 옵션은 정확히 무엇을 수행합니까?

어떤 사람들은 나를 믿지 않기 때문에 ... 편집 /etc/ssh/sshd_config하고 ClientAliveInterval 61매분 ClientAliveCountMax 0마다 crontab을 통해 아래 스크립트를 실행하고 컴퓨터가 종료되는 것을 지켜보십시오.

#!/bin/bash

# ssh_idle_shutdown.bash
# the first num (a) in file /var/run/sshidleshutdown.txt is 0 or 1 based on if a ssh connection has happened

# if a == 1 and count == 0 then do something

if [ ! -f /var/run/sshidleshutdown.txt ]
then
    echo 0 > /var/run/sshidleshutdown.txt
fi

count=`netstat -tnpa | grep 'ESTABLISHED.*sshd' | wc -l`

str=`head  /var/run/sshidleshutdown.txt`
astr=${str:0:1}
a=$((astr))

if [ $a -eq 0 ] && [ $count -gt 0 ]
then
   echo 1 > /var/run/sshidleshutdown.txt
elif [ $a -eq 1 ] && [ $count -eq 0 ]
then
   echo -n "ssh idle condition met system shutdown called at " >> /var/log/sshidleshutdownlog.txt
   date >> /var/log/sshidleshutdownlog.txt
   rm -f /var/run/sshidleshutdown.txt
#  execute /sbin/shutdown
fi

이것을 넣어/etc/crontab

1 * * * * *  root   /path_to/ssh_idle_shutdown.bash

그리고 또한 할

chown root.root  /path_to/ssh_idle_shutdown.bash
chmod 700 /path_to/ssh_idle_shutdown.bash

이를 통해 SSH 서버는 어떤 세션이 유휴 상태인지 식별하고 SSH 서버는 해당 세션을 닫습니다. 적어도 하나의 SSH 세션이 설정된 것을 확인하면 SSH 서버가 유휴 세션을 기반으로 닫고 netstat를 통해 SSH 세션이 더 이상 남아 있지 않을 때까지 확인을 시작합니다 ClientAlive Interval. 이에 따라 작동 주파수를 조정하십시오.ClientAliveCountMaxsshd_configClientAliveInterval/etc/crontabssh_idle_shutdown.bash

관련 정보