回答:
これを対話的に実行することを計画している場合、最も簡単なのは、単に呼び出しwho
て、リモートホストからのユーザーがいるかどうかを確認することです。
[you@host]$ who
user1 :0 Feb 8 09:45
user1 pts/1 Feb 14 17:56 (:0.0)
malcolm pts/3 Feb 15 17:50 (cockpit.serenity.com)
reynold pts/2 Feb 15 17:48 (host123.firefly.co.uk)
これはもちろん絶対確実というわけではありませんが、オンデマンドで入力して人間の目で簡単に処理するのは非常に簡単です。
@gravyfaceが指摘したように、-u
オプションを含めるwho
と、関連付けられたPIDも出力され、kill
接続を終了するために渡すことができます。
-u
PIDを提供します。
who -u
。pidを強制終了しても、リモートマシンの接続は終了しませんでした。しかし、lsof -i | grep ":ssh"
@ kceの回答で提案した後、別のpidを取得しました。そのプロセスを強制終了すると、接続が終了しました。たぶん、ssh接続のために開始された複数のプロセスがあり、接続を終了しない人によって表示されたプロセスを強制終了しています。それが私の説明です。
lsofを使用するのはどうですか?
# lsof -i |grep ":ssh"
sshd 1943 root 3u IPv6 5698 TCP *:ssh (LISTEN)
sshd 1943 root 4u IPv4 5700 TCP *:ssh (LISTEN)
sshd 3217 root 3r IPv4 9687 TCP www.example.com:ssh->192.168.61.11:7341 (ESTABLISHED)
sshd 3220 user1 3u IPv4 9687 TCP www.example.com:ssh->192.168.61.11:7341 (ESTABLISHED)
sshd 3327 root 3r IPv4 10595 TCP www.example.com:ssh->192.168.61.11:7385 (ESTABLISHED)
sshd 3330 user2 3u IPv4 10595 TCP www.example.com:ssh->192.168.61.11:7385 (ESTABLISHED)
その後、問題のある接続を強制終了できるはずです(たとえば、user2を切断するため)。
# kill -9 3330
lsof -i tcp:22
と、grepは必要ありません。
ssh
と指定されていない-p
オプション...
ssh接続を表示するには、を実行しnetstat -atn | grep ':22'
ます。ポート22のすべての接続が表示されます。
接続を切断するには、でsshd(SSHデーモン)のPIDを見つけてみてくださいps-ax
。
編集:私はあなたが彼らのbash
セッション(または同等のシェル)のPIDを見つけることができると思います。それらを大丈夫に落とすべき殺害。