私はrootとしてSSHを使用し、同じシステム上でSSHにrootを再設定します。そのため、2つのウィンドウが開いており、両方ともSSHを介してリモートコンピュータのルートディレクトリに接続されています。
シェルでこれら2つのセッションのリストをどのように表示できますか?
答え1
who
またはより多くの情報w
をwho -a
入手してください。
このコマンドは、単にエンドデバイスのすべてのログインセッションを表示します。 SSHセッションはpts
列に示すように疑似ターミナルスレーブ()にありますが、TTY
すべてのpts接続がSSHセッションであるわけではありません。例えば、またはのxterm
ようscreen
な疑似端末装置を生成するプログラムはpts
。バラよりptsとttyの違いTTY
列のさまざまな値をよりよく説明してください。さらに、SFTPセッションはシェルログインセッションではないため、この方法ではSFTPセッションにログインした人を表示しません。
すべてのSSHセッションを明示的に表示する方法がわかりません。を介してログイン情報を読み取ったり、先ほど説明したようなツールを使用したり、utmp
@sebelkの回答で説明されているように、ネットワークツールを使用してポート22(またはSSHがある場所)で開いているTCP接続を見つけて、この情報を推論することができます。あります。どこでも)デーモンが聞いています)。wtmp
last
w
who
取り得る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/)。
もう一つの解決策は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
答え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)