接続されているすべてのSSHセッションを一覧表示しますか?

接続されているすべてのSSHセッションを一覧表示しますか?

私はrootとしてSSHを使用し、同じシステム上でSSHにrootを再設定します。そのため、2つのウィンドウが開いており、両方ともSSHを介してリモートコンピュータのルートディレクトリに接続されています。

シェルでこれら2つのセッションのリストをどのように表示できますか?

答え1

whoまたはより多くの情報wwho -a入手してください。

このコマンドは、単にエンドデバイスのすべてのログインセッションを表示します。 SSHセッションはpts列に示すように疑似ターミナルスレーブ()にありますが、TTYすべてのpts接続がSSHセッションであるわけではありません。例えば、またはのxtermようscreenな疑似端末装置を生成するプログラムはpts。バラよりptsとttyの違いTTY列のさまざまな値をよりよく説明してください。さらに、SFTPセッションはシェルログインセッションではないため、この方法ではSFTPセッションにログインした人を表示しません。

すべてのSSHセッションを明示的に表示する方法がわかりません。を介してログイン情報を読み取ったり、先ほど説明したようなツールを使用したり、utmp@sebelkの回答で説明されているように、ネットワークツールを使用してポート22(またはSSHがある場所)で開いているTCP接続を見つけて、この情報を推論することができます。あります。どこでも)デーモンが聞いています)。wtmplastwwho

取り得る3番目のアプローチは、SSHデーモンのログ出力を解析することです。オペレーティングシステムの展開、SSHの展開、構成などによっては、ログ出力がさまざまな場所にある可能性があります。 RHEL 6システムでこれを見つけました/var/log/sshd.log。 RHEL 7システムとArch Linuxシステムでjournalctl -u sshdログを表示するには、これを使用する必要があります。一部のシステムでは、SSHログをsyslogに出力できます。あなたのログは、次の場所または他の場所にある可能性があります。以下は、表示できる内容の例です。

[myhost ~]% grep hendrenj /var/log/sshd.log | grep session
May  1 15:57:11 myhost sshd[34427]: pam_unix(sshd:session): session opened for user hendrenj by (uid=0)
May  1 16:16:13 myhost sshd[34427]: pam_unix(sshd:session): session closed for user hendrenj
May  5 14:27:09 myhost sshd[43553]: pam_unix(sshd:session): session opened for user hendrenj by (uid=0)
May  5 18:23:41 myhost sshd[43553]: pam_unix(sshd:session): session closed for user hendrenj

ログには、セッションの開閉時間、セッションが属する人、ユーザーが接続されている場所などが表示されます。しかし、あなたはたくさん人間が読める単純なイベントログから現在アクティブなセッションのリストを取得したい場合は、解析が完了した後でもログに実際にどのセッションを決定するのに十分な情報が含まれていないため、まだ正確なリストではない可能性があります。それでもアクティブです。 - 本質的に推測だけです。これらのログを使用して得られる唯一の利点は、情報が他の方法などの補助ソースを介さずにSSHDから直接提供されることです。

ただ使用することをお勧めしますw。ほとんどの場合、必要な情報を入手できます。

答え2

以下を使用して、各セッションSSHを表示できます。

[root@router ~]# netstat -tnpa | grep 'ESTABLISHED.*sshd'
tcp        0      0 192.168.1.136:22            192.168.1.147:45852         ESTABLISHED 1341/sshd           
tcp        0      0 192.168.1.136:22            192.168.1.147:45858         ESTABLISHED 1360/sshd

または、次のように機能することもできます。

[root@router ~]# ps auxwww | grep sshd:
root      1341  0.0  0.4  97940  3952 ?        Ss   20:31   0:00 sshd: root@pts/0 
root      1360  0.0  0.5  97940  4056 ?        Ss   20:32   0:00 sshd: root@pts/1 
root      1397  0.0  0.1 105300   888 pts/0    S+   20:37   0:00 grep sshd:



       

答え3

@sebelkの答えを拡張すると、次のようになります。

使用されるソリューションnetstatは良いソリューションですが、ルートアクセスが必要です。また、このnet-toolsパッケージ(付属netstat)はいくつかの最新のLinuxディストリビューション(https://dougvitale.wordpress.com/2011/12/21/deprecated-linux-networking-commands-and-their-replacements/)。

もう一つの解決策はnetstatssたとえば、(もはやルートは必要ありません):

user@router:~# ss | grep ssh
tcp    ESTAB      0      0      192.168.1.136:ssh                  192.168.1.147:37620                
tcp    ESTAB      0      0      192.168.1.136:ssh                  192.168.1.147:37628

答え4

簡単に参照できるように追加しました。

擬似シェル(例:/dev/pts/0 )にある場合、最も簡単な方法の1つは次のとおりです。

[user1@host ~]$ echo $SSH_CONNECTION

返さなければなりません:あなたのIPとポート、そしてあなたが接続したIPとポート

192.168.0.13 50473 192.168.0.22 22

ttyまたはwho()を使用していくつかの情報を取得することもできますw。 (編集:今、他の投稿に上記のリストが表示されます。)

[user1@host ~]$ who
user1 tty1          2018-01-03 18:43
user2 pts/0        2018-01-03 18:44 (192.168.0.13)

関連情報