「一定期間操作のないbashを自動的にログアウトする方法」の版間の差分

提供: セキュリティ
移動: 案内検索
(ページの作成:「sshでサーバにログインしたときに、ログアウトをし忘れることがあるでしょう。bashでは、一定期間操作をしない場合、...」)
 
 
(同じ利用者による、間の4版が非表示)
行22: 行22:
 
</syntaxhighlight>
 
</syntaxhighlight>
  
上記の設定だと ssh ユーザ以外もログアウトさせてしまいます。
+
上記の設定だと [[ssh]] ユーザ以外もログアウトさせてしまいます。
  
[[ssh]]ユーザを限定的にログアウトする場合には、以下の通りです。
+
[[ssh]]でログインしているユーザだけをログアウトする場合には、sshのコネクションがあるかどうかを判断して、TMOUTを設定します。
 
<syntaxhighlight lang="bash">
 
<syntaxhighlight lang="bash">
if [ -n "$SSH_CONNECTION" ]; then export TMOUT=300; fi
+
if [ -n "$SSH_CONNECTION" ]; then
 +
export TMOUT=300;
 +
fi
 
</syntaxhighlight>
 
</syntaxhighlight>
 +
 +
リードオンリーにするのであれば、以下の通りです。
 +
<syntaxhighlight lang="bash">
 +
if [ -n "$SSH_CONNECTION" ]; then
 +
TMOUT=300
 +
readonly TMOUT
 +
export TMOUT
 +
fi
 +
</syntaxhighlight>
 +
 
== 使い方 ==
 
== 使い方 ==
 
実際には、このような形になります。
 
実際には、このような形になります。
行42: 行54:
 
$ vim
 
$ vim
 
</syntaxhighlight>
 
</syntaxhighlight>
 +
ただし、tmuxやGNU Screen のようなターミナルマルチプレクサを起動した場合、入力がないとターミナルマルチプレクサとシェルの両方が終了してしまいます。screenの上で、topなどのコマンドを動かしていれば、切断されません。
  
 
host1 で TMOUT が設定されいても、host2 で設定されていなければ、[[ssh]]は、継続します。
 
host1 で TMOUT が設定されいても、host2 で設定されていなければ、[[ssh]]は、継続します。
行49: 行62:
 
host2$
 
host2$
 
</syntaxhighlight>
 
</syntaxhighlight>
 +
== その他のシェル ==
 +
=== csh/tcsh ===
 +
.cshrc に autologout を設定します。
 +
=== sh ===
 +
.profile に TIMEOUT を設定します。
 +
=== ksh ===
 +
.profile に TMOUT を設定します。
 
== sshdの設定でログアウトさせる ==
 
== sshdの設定でログアウトさせる ==
 
/etc/ssh/[[sshd_config]]の設定で、アイドルなセッションをログアウトさせることもできます。
 
/etc/ssh/[[sshd_config]]の設定で、アイドルなセッションをログアウトさせることもできます。
行61: 行81:
 
== 関連項目 ==
 
== 関連項目 ==
 
* [[ssh接続が自動切断される場合の回避方法]]
 
* [[ssh接続が自動切断される場合の回避方法]]
 +
* [[一定期間操作のないssh接続を切断する方法]]
 
* [[Secure Shell]]
 
* [[Secure Shell]]
 
* [[bash]]
 
* [[bash]]
 
<!-- vim: filetype=mediawiki
 
<!-- vim: filetype=mediawiki
 
-->
 
-->

2015年9月22日 (火) 22:22時点における最新版

sshでサーバにログインしたときに、ログアウトをし忘れることがあるでしょう。bashでは、一定期間操作をしない場合、自動的にログアウトする機能があります。

読み方

bash
ばっしゅ

概要

sshのログインしっぱなしのセッションが残っていることは、好ましい状態ではありません。

設定

.profile 等に以下の設定をします。

例えば、10分間の入力がないときに、ログアウトさせたい場合には、60 * 10 の 600 を指定します。

export TMOUT=600

/etc/profile に設定して、上書きを禁止する場合には、このように書きます。

TMOUT=300
readonly TMOUT
export TMOUT

上記の設定だと ssh ユーザ以外もログアウトさせてしまいます。

sshでログインしているユーザだけをログアウトする場合には、sshのコネクションがあるかどうかを判断して、TMOUTを設定します。

if [ -n "$SSH_CONNECTION" ]; then
	export TMOUT=300;
fi

リードオンリーにするのであれば、以下の通りです。

if [ -n "$SSH_CONNECTION" ]; then
	TMOUT=300
	readonly TMOUT
	export TMOUT
fi

使い方

実際には、このような形になります。

$ ssh test@10.0.0.2
Last login: Wed Feb 25 23:38:57 2015 from 10.0.0.3
test@ubuntu:~$ timed out waiting for input: auto-logout
Connection to 10.0.0.2 closed.

自動ログアウトできないケース

プログラムを実行して、それが実行中の場合、一切入力がなくても、ログアウトしません。vimを起動していたら、bashは、終わりません。

$ ssh test@host1
$ vim

ただし、tmuxやGNU Screen のようなターミナルマルチプレクサを起動した場合、入力がないとターミナルマルチプレクサとシェルの両方が終了してしまいます。screenの上で、topなどのコマンドを動かしていれば、切断されません。

host1 で TMOUT が設定されいても、host2 で設定されていなければ、sshは、継続します。

host0$ ssh test@host1
host1$ ssh test@host2
host2$

その他のシェル

csh/tcsh

.cshrc に autologout を設定します。

sh

.profile に TIMEOUT を設定します。

ksh

.profile に TMOUT を設定します。

sshdの設定でログアウトさせる

/etc/ssh/sshd_configの設定で、アイドルなセッションをログアウトさせることもできます。

ClientAliveInterval 3600
ClientAliveCountMax 0

sshdに設定を反映するには、reloadします。

sudo service sshd reload

関連項目