Linuxサーバーで、現在のすべてのSSH接続のリストを見つける方法、または特定のSSH接続を切断する方法を教えてください。
これをインタラクティブに実行する場合は、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
は、接続を終了するためにkill
に渡すことができる関連PIDも出力します。
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
Ssh接続を表示するには、netstat -atn | grep ':22'
を実行します。ポート22のすべての接続が表示されます。
接続をドロップするには、ps-ax
を使用してsshd(SSHデーモン)のPIDを見つけてみてください。
編集:bash
セッション(または同等のシェル)のPIDを見つけることができると思います。それらを大丈夫に落とすべき殺害。
別のリソース: this thread には、この件に関するいくつかのヒントがあります。
これを試して:
$ ps aux | grep sshd
それらを切断するには、kill PID
(ここでPID
は2番目の列のプロセスIDです)、root権限を持っているか、問題のユーザーである場合。