削除されたSSHセッションの終了

削除されたSSHセッションの終了

私の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/config15秒ごとにコネクション保持メッセージを送信するように設定することもできます。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 -fsshdプロセスを表示する必要があります。例:

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=出力解析はエラーが発生しやすいことがよくあります(特にさまざまなシステムでは)。

関連情報