私のSSHセッションがダウンしているようです。それは私の主な問題ではありませんが、最大の問題は、私の以前のセッションがまだ存在することです。そしてもっと悪いのは、セッションの1つが実行中でvisudo
アクセスできないことです!
who
多くのセッションが表示され、私が知っている現在のセッションを除いて、すべてが切断されました。リソースを解放するために以前のセッションを終了するにはどうすればよいですか?
答え1
sudoersファイルがロックされる問題をすぐに解決するには、ロックファイルを削除するだけです。通常、「/etc/sudoers.tmp」を確認するには、visudoのマニュアルページをご覧ください。ロックファイルを削除すると、visudoを再実行できます。
まだ保留中のすべてのセッションを削除するには、まず現在のセッションのPIDを確認してください。それから自分のPIDが12345なら
ps -ef | grep sshd | grep -v -e grep -e root -e 12345 | awk '{print "sudo kill -9", $2}' | sh
| sh
終了したいPIDを確認するために、最後のエントリなしでこれを行うことができます。
Linuxを使用している場合は、次のものを使用できます。
pkill -o -u $USER sshd
最も古いSSHセッションを終了します。現在のセッションだけが残るまでこの作業を続けます。
ServerAliveInterval 15
データが送信されない場合は、.ssh/config
15秒ごとにコネクション保持メッセージを送信するように設定することもできます。man ssh_config
より多くの情報を知りたいです。
答え2
これにより、2日以上停止したセッションが終了します。クローンとして機能します。
for i in `w|awk '{print $2,$5}'|grep days|cut -d' ' -f1`; do fuser -k /dev/$i; done
これで(最後のアクティブセッション)を除くすべてが終了します。端末で実行してください。
for i in `w|tail -n+3|awk '{print $2,$5}'|grep -v 0.00s|cut -d' ' -f1`; do fuser -k /dev/$i; done
答え3
そのコマンドと引数(例:procpsなど)を表示できるようにプロセスを一覧表示する場合は、ps -f
sshdプロセスを表示する必要があります。例:
sshd: user@pts/7
ここで Terminal( pts/7
) は重要な部分です。 CurrentTerminal( ) と比較すると、tty
どのセッションがアクティブなセッションであるかを確認できます。もちろん、これを行う他の方法もあります(たとえば、現在実行中のシェルのPIDを見てプロセスツリーでそのPIDを見つけるなど)、これは最も簡単な方法です。その後、次のものを使用できます。
# current tty name
TTY=$(tty | cut -f3- -d/)
# PIDs of other sshd processes
ps -o pid= -o command= -C sshd \
| grep sshd:.*@ \
| grep -v "@$TTY" \
| sed "s/ sshd.*//"
その後、PIDを入力して殺すことxargs
ができますが、sshd
新しい接続を処理する基本プロセスが終了していないことを常に確認してください。。
関連するメモでは、ps
出力形式の可変性のため、-o pid= -o command=
出力解析はエラーが発生しやすいことがよくあります(特にさまざまなシステムでは)。