すべてのSSHセッションが1分以上アイドル状態の場合は、マシンを終了します。

すべてのSSHセッションが1分以上アイドル状態の場合は、マシンを終了します。

アイドルは、実行中のフォアグラウンドプログラムがなく、端末がユーザー入力を待っていますが、ユーザーが何も入力しなかったことを意味します。

実際、私の究極の目標は、すべての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セッションまたはプロセスが存在するかどうかを確認し、存在しない場合は閉じます。

安全を確保するために、使用する前にこれら2つのSSHパラメータをお読みください。

https://man.openbsd.org/sshd_config

sshd_configの `ServerAliveInterval`と `ClientAliveInterval`オプションは正確に何をしますか?

一部の人は私を信じていないので...編集し、/etc/ssh/sshd_configClientAliveInterval 61ClientAliveCountMax 0crontabを介して以下のスクリプトを実行し、コンピュータがシャットダウンするのを見てください。

#!/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 サーバーはそのセッションを閉じます。少なくとも1つのSSHセッションが確立されたことを確認すると、SSHサーバーはアイドルセッションに基づいて閉じ、netstatを介してSSHセッションが残っていなくなるまで確認を開始しますClientAlive Interval。これに応じて動作周波数を調整してください。ClientAliveCountMaxsshd_configClientAliveInterval/etc/crontabssh_idle_shutdown.bash

おすすめ記事