SSHセッションはドロップしているように見えますが、それは私の大きな問題ではありません。大きな問題は、以前のセッションがまだ生きているvisudo
ことです。
who
現在のセッション以外のセッションがすべて表示されますが、古いセッションを終了してリソースを解放するにはどうすればよいですか?
who
もう0ではありません)、ありがとう!
SSHセッションはドロップしているように見えますが、それは私の大きな問題ではありません。大きな問題は、以前のセッションがまだ生きているvisudo
ことです。
who
現在のセッション以外のセッションがすべて表示されますが、古いセッションを終了してリソースを解放するにはどうすればよいですか?
who
もう0ではありません)、ありがとう!
回答:
sudoersファイルがロックされているという差し迫った問題を解決するには、ロックファイルを削除するだけです。通常は `/etc/sudoers.tmp"になります。visudoのmanページで確認してください。ロックファイルを削除した場合は、visudoを再度実行できます。
ハングしたままになっているすべてのセッションを削除するには、まず現在のセッションのPIDを見つけます。次に、独自のPIDが12345の場合、実行します
ps -ef | grep sshd | grep -v root | grep -v 12345 | grep -v grep | awk '{print "sudo kill -9", $2}' |sh
| sh
殺すことを計画しているPIDを確認するためだけに、最後の最初なしでそれを行うことができます。
Linuxを使用している場合は、代わりに使用できます
pkill -o -u YOURUSERNAME sshd
最も古いSSHセッションを強制終了します。現在のセッションが残り1つになるまで、これを繰り返します。
データが送信されていないときに15秒ごとにキープアライブメッセージを送信するように設定することもできServerAliveInterval 15
ます.ssh/config
。man ssh_config
詳細については。
grep -v 12345
構文の一部がどのような目的に役立つのか分かりませんか?含まれていないものをすべて渡します12345
か?
grep -v 12345
「一致する行の一致12345
を削除する」ことを意味します。したがって、まず自分のセッションのPIDを識別し、の代わりにそのPIDを使用する必要があり12345
ます。
who
またはtop
署名済みユーザーの古い数を表示した後でも、1だけを表示する必要があります。
プロセスをリストして、それらのコマンドと引数が表示されるように(たとえばps -f
、procpsから表示されるように)、sshdプロセスが表示されます(例:
sshd: user@pts/7
ここではターミナル(pts/7
)が重要な部分です。現在のターミナル(tty
)と比較すると、アクティブなセッションがわかります。もちろん、他の方法もあります(現在実行中のシェルの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=
)。
fuser -k /dev/pts/0
場合は、who
出力に表示されるような端末を使用できます。ただし、これらすべてがSIGHUPを無視したのは少し奇妙です。彼らはscreen
セッションまたは何かで実行されていましたか?