回答:
who
またはw
; who -a
追加情報について。
これらのコマンドは、端末デバイス上のすべてのログインセッションを表示するだけです。列にpts
示されているように、SSHセッションは擬似端末スレーブ()で行われTTY
ますが、すべてのPTS接続がSSHセッションであるとは限りません。たとえば、xterm
またはなどの擬似端末デバイスを作成するプログラムはとしてscreen
表示されpts
ます。列にあるさまざまな値の詳細については、ptsとttyの違いを参照してくださいTTY
。さらに、この方法では、SFTPセッションはシェルログインセッションではないため、SFTPセッションにログインしているユーザーは表示されません。
すべてのSSHセッションを明示的に表示する方法がわかりません。あなたはからログイン情報を読み取ることによって、この情報を推測することができますutmp
/ wtmp
のようなツールを使用してlast
、w
または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
ます。ほとんどの場合、これにより必要な情報が得られます。
次のコマンドを使用して、すべてのセッション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:
pgrep -ai sshd
pgrep: invalid option -- 'i'
Ubuntu 14.04で。
-i
mac / bsdフレーバーでのみ使用可能です。Ubuntuで使用できますpgrep -af ssd
。参照してくださいserverfault.com/a/883270/116777詳細
使用することもできます
ps ax | grep sshd
参照用に追加されました。
疑似シェル(例:/ 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)
SECONDS
グローバルを参照することをお勧めします。を介してこれを使用できます。これによりecho $SECONDS
、認識された接続以降の時間量が表示されます
@sebelkの答えを拡張する:
を使用したソリューションnetstat
は良い方法ですが、ルート権限が必要です。さらに、net-tools
(提供するnetstat
)パッケージは、いくつかの新しいLinuxディストリビューションで廃止されました(https://dougvitale.wordpress.com/2011/12/21/deprecated-linux-networking-commands-and-their-replacements/)。
代替ソリューションは、の代替を使用することが、その後でnetstat
、ss
。例(ルートが不要になったことに注意してください):
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
使用できます
last | head
.loginスクリプトでこれを何年も使用して、最近システムにログインしたユーザーを確認しました。ログインを使用してシステム上に誰かがいるかどうかを確認するのは、セキュリティが不十分なデバイスでした。
last
したセッションでさえリストされない場合があります。
last
をサポート-p
?それは何をするためのものか?
"last from util-linux 2.31.1"
確かにそれを持っています。
who -a
コマンド