アイドルは、実行中のフォアグラウンドプログラムがなく、端末がユーザー入力を待っていますが、ユーザーが何も入力しなかったことを意味します。
実際、私の究極の目標は、すべてのSSH
セッションがアイドル状態で終了し、x-window
アイドル状態で終了することです。
自由時間はをx-window
使用して決定できますxprintidle
。これで、すべてのSSHセッションが無料であることを確認できます。
私はLinux上でコンピュータがアイドル状態であることを確認するためのいくつかの方法を見つけましたが、ほとんどはデスクトップがアイドルx-window
状態かどうかに基づいています。
ベストアンサー1
存在する/etc/ssh/sshd_config
# default values
ClientAliveInterval 0
ClientAliveCountMax 3
ClientAliveInterval
600 {秒}と0に設定すると、ClientAliveCountMax
10分間アイドル状態のすべてのSSHセッションが閉じます。このメカニズムを使用すると、すべてのSSHセッションを持つことができます。きれいに選択した特定のタイムアウトまたはアイドル期間が経過すると終了します。次に、SSHセッションまたはプロセスが存在するかどうかを確認し、存在しない場合は閉じます。
安全を確保するために、使用する前にこれら2つの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 サーバーはそのセッションを閉じます。少なくとも1つのSSHセッションが確立されたことを確認すると、SSHサーバーはアイドルセッションに基づいて閉じ、netstatを介してSSHセッションが残っていなくなるまで確認を開始しますClientAlive Interval
。これに応じて動作周波数を調整してください。ClientAliveCountMax
sshd_config
ClientAliveInterval
/etc/crontab
ssh_idle_shutdown.bash