Yanıtlar:
who
veya w
; who -a
Ek bilgi için.
Bu komutlar sadece bir terminal cihazındaki tüm oturum açma oturumlarını gösterir. Bir SSH oturumu pts
, TTY
sütunda gösterildiği gibi bir sözde-terminal slave ( ) üzerinde olacaktır , ancak tüm pts bağlantılarının SSH oturumu olmaması gerekir. Örneğin, sözde-uçbirim aygıtını oluşturan programlar xterm
veya gibi screen
gösterilecektir pts
. Sütunda bulunan farklı değerlerin daha iyi bir açıklaması için bkz. Pts ve tty arasındaki fark TTY
. Ayrıca, bu yaklaşım, bir SFTP oturumuna giriş yapmış hiç kimseyi göstermez, çünkü SFTP oturumları kabuk oturum açma oturumları değildir.
Tüm SSH oturumlarını açıkça göstermenin hiçbir yolunu bilmiyorum. Sen gelen giriş bilgilerini okuyarak bu bilgileri çıkarabiliriz utmp
/ wtmp
gibi bir araç vasıtasıyla last
, w
ya who
her yerde SSH portu 22 (veya açık tcp bağlantılarını bulmak için sadece tarif ettik gibi, ya da yanıt açıklandığı @sebelk gibi ağ araçlarını kullanarak Daemon (s) dinliyor.
Alacağınız üçüncü bir yaklaşım da SSH daemonundan log çıktısını ayrıştırmaktır. İşletim sistemi dağıtımınıza, SSH dağıtımınıza, yapılandırmanıza ve benzerlerine bağlı olarak, günlük çıktınız bir çok farklı yerde olabilir. Bir RHEL 6 kutusunda, günlükleri buldum /var/log/sshd.log
. Bir RHEL 7 kutusunda ve ayrıca bir Arch Linux kutusunda, journalctl -u sshd
günlükleri görüntülemek için kullanmam gerekiyordu. Bazı sistemler SSH günlüklerini syslog'a gönderebilir. Günlükleriniz bu yerlerde veya başka bir yerde olabilir. İşte görebileceklerinizin bir örneği:
[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
Kayıtlar, oturumların ne zaman açılıp kapandığını, oturumun kime ait olduğunu, kullanıcının nereden bağlandığını ve daha fazlasını gösterir. Ancak, bunu basit, insan tarafından okunabilen bir olay günlüğünden şu anki etkin oturumların listesine almak istiyorsanız çok ayrıştırma yapmanız gerekecek ve muhtemelen ne zaman doğru bir liste olmayacağını hangi oturumların hala aktif olduğunu belirlemeye yetecek kadar bilgi içermediğinden ayrıştırma işlemini tamamladınız - aslında sadece tahmin yapıyorsunuz. Bu günlükleri kullanarak kazandığınız tek avantaj, bilginin diğer yöntemler gibi ikinci el kaynak yerine doğrudan SSHD'den gelmesidir.
Sadece kullanmanızı öneririm w
. Çoğu zaman, bu size istediğiniz bilgileri verecektir.
Her oturum ssh'sini aşağıdaki komutla görebilirsiniz:
[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
Belki de bu faydalı olabilir:
[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 tarihinde.
-i
sadece mac / bsd tatlarında kullanılabilir. ubuntu'da kullanabilirsiniz pgrep -af ssd
. Ayrıntılar için serverfault.com/a/883270/116777
Ayrıca kullanabilirsin
ps ax | grep sshd
Basit referans için eklendi.
Bir sözde kabuğuysanız (örnek: / dev / pts / 0) en basit yollardan biri:
[user1@host ~]$ echo $SSH_CONNECTION
Dönmesi gerekir: ip ve portunuz ve bağlı olduğunuz ip ve port
192.168.0.13 50473 192.168.0.22 22
Ayrıca tty
veya who
( w
) kullanarak bazı bilgiler edinebilirsiniz : (düzenle: Şimdi başka bir gönderide yukarıdaki listede olduğunu görüyorum)
[user1@host ~]$ who
user1 tty1 2018-01-03 18:43
user2 pts/0 2018-01-03 18:44 (192.168.0.13)
SECONDS
. Bunu echo $SECONDS
, algılanan bağlantıdan bu yana zaman miktarını gösteren üzerinden kullanabilirsiniz
@ Sebelin kullanıcısının yanıtı:
Kullanılan çözüm netstat
iyi bir çözümdür ancak kök ayrıcalıkları gerektirir. Ek olarak, net-tools
( netstat
daha fazlasını sağlayan ), daha yeni bir Linux distroda ( https://dougvitale.wordpress.com/2011/12/21/deprecated-linux-networking-commands-and-their-replac/ ) paketin kullanımdan kaldırılmıştır .
Alternatif bir çözüm için yerine kullanmak için daha sonra netstat
, ss
. Örneğin (artık kök gerekmediğine dikkat edin):
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
Kullanabilirsiniz
last | head
Sisteme son zamanlarda kimin girdiğini görmek için .login komut dosyasında yıllarca bunu kullandım. Giriş bilgilerinizi kullanan birisinin sistemde olup olmadığını görmek için zayıf güvenlikli bir cihazdı.
last
listelenmemiş olabilir.
last
destekler -p
? Bu ne işe yarıyor?
"last from util-linux 2.31.1"
kesin olarak var.
who -a