接続されているすべてのSSHセッションをリストしますか?


184

ルートにSSHで接続した後、同じマシンのルートに再びSSHで接続しました。したがって、リモートマシンのルートにSSHで接続された2つのウィンドウを開きます。

シェルから、これら2つのセッションのリストを表示するにはどうすればよいですか?

回答:


188

whoまたはw; who -a追加情報について。

これらのコマンドは、端末デバイス上のすべてのログインセッションを表示するだけです。列にpts示されているように、SSHセッションは擬似端末スレーブ()で行われTTYますが、すべてのPTS接続がSSHセッションであるとは限りません。たとえば、xtermまたはなどの擬似端末デバイスを作成するプログラムはとしてscreen表示されptsます。列にあるさまざまな値の詳細については、ptsとttyの違いを参照してくださいTTY。さらに、この方法では、SFTPセッションはシェルログインセッションではないため、SFTPセッションにログインしているユーザーは表示されません。

すべてのSSHセッションを明示的に表示する方法がわかりません。あなたはからログイン情報を読み取ることによって、この情報を推測することができますutmp/ wtmpのようなツールを使用してlastwまたはwhoどこでもあなたのSSHポート22(または上の開いているTCP接続を見つけるために、私は説明してきたような、あるいは彼らの答えで説明@sebelkのようなネットワーキングツールを使用して、デーモンはリッスンしています)。

3番目のアプローチは、SSHデーモンからのログ出力を解析することです。OSディストリビューション、SSHディストリビューション、構成などに応じて、ログ出力はさまざまな場所にある場合があります。RHEL 6ボックスで、ログを見つけました/var/log/sshd.log。RHEL 7ボックスおよびArch Linuxボックスではjournalctl -u sshd、ログを表示するために使用する必要がありました。システムによっては、SSHログをsyslogに出力する場合があります。ログはこれらの場所または他の場所にある可能性があります。表示されるサンプルを次に示します。

[myhost ~]% cat /var/log/sshd.log | grep hendrenj | 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ます。ほとんどの場合、これにより必要な情報が得られます。



接線方向に関連する問題を探しているときにこれを見つけました。関係ありません。これは、私がStackサイトで見た最高の答えの1つです!私は今、この特定の分野についてより多くのことを知っています(より良い言葉がないため)編集:ありがとう!
jscharf

107

次のコマンドを使用して、すべてのセッション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:

4
ありがとうございました; この回答は、シェルにログインしているユーザーのみをリストするトップの回答よりもはるかに優れています。このソリューションは、SFTPユーザーも検出します。
ヘイデンシッフ

1
最近ではほとんどのボックスで使用できますpgrep -ai sshd
-ccpizza

@ccpizza:pgrep: invalid option -- 'i'Ubuntu 14.04で。
マーティンシュレーダー

2
@MartinSchröder:-imac / bsdフレーバーでのみ使用可能です。Ubuntuで使用できますpgrep -af ssd。参照してくださいserverfault.com/a/883270/116777詳細
ccpizza

@HaydenSchiffと同様に、シェルを使用せずに、ポート転送用にSSHトンネルのみを開いているユーザーを見つける必要がありました。これは役に立ちました!
トバイアス


7

参照用に追加されました。

疑似シェル(例:/ dev / pts / 0)を使用している場合、最も簡単な方法の1つは次のとおりです。

[user1@host ~]$ echo $SSH_CONNECTION

返される必要があります:あなたのIPとポートおよびIPあなたの接続先とポート

192.168.0.13 50473 192.168.0.22 22

ttyまたはwhow)を使用して情報を取得することもできます:(編集:別の投稿で上記のリストになりました)

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

Bashグローバルを扱った以前の回答を拡張します。SECONDSグローバルを参照することをお勧めします。を介してこれを使用できます。これによりecho $SECONDS、認識された接続以降の時間量が表示されます
NerdOfCode

これにより、現在アクティブなセッション(入力中のセッション)の情報が表示されます。しかし、質問は現在接続されているすべてのセッションをリストする方法を尋ねます。
Gマン

6

@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

2

使用できます

last | head

.loginスクリプトでこれを何年も使用して、最近システムにログインしたユーザーを確認しました。ログインを使用してシステム上に誰かがいるかどうかを確認するのは、セキュリティが不十分なデバイスでした。


1
...しかし、それは必ずしもアクティブなセッションのリストではありません(この質問の内容)。ログインアクティビティによっては、実行lastしたセッションでさえリストされない場合があります。
ムル

1
「last -p now」は、現在のすべてのsshセッションをリストします。
JOウィリアムズ

@JOWilliamsのバージョンlastをサポート-p?それは何をするためのものか?
mwfearnley

@mwfearnleyのバージョンは"last from util-linux 2.31.1"確かにそれを持っています。
V.7
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.