Tüm bağlı SSH oturumlarını listele?


184

Ben sadece SSH'ye root oldum ve sonra SSH aynı makinede yine root'a döndüm. Bu yüzden uzak makinemde her iki SSH'yi de açacak iki pencere var.

Kabuktan bu iki oturumun listesini nasıl görebilirim?

Yanıtlar:


188

whoveya w; who -aEk bilgi için.

Bu komutlar sadece bir terminal cihazındaki tüm oturum açma oturumlarını gösterir. Bir SSH oturumu pts, TTYsü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 xtermveya gibi screengö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/ wtmpgibi bir araç vasıtasıyla last, wya whoher 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 sshdgü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.



Teğetsel olarak ilgili bir problem ararken bunu buldum. Önemli değil. Bu herhangi bir Stack sitesinde gördüğüm en iyi cevaplardan biri! Şimdi bu alan hakkında daha iyi bir şey biliyorum (daha iyi bir kelime bulunmadığı için). EDIT: Teşekkürler!
jscharf

107

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:

4
Teşekkür ederim; Bu cevap, yalnızca bir kabukta oturum açan kullanıcıları listeleyen en üst cevaptan çok daha iyidir. Bu çözüm aynı zamanda SFTP kullanıcılarını da bulur.
Hayden Schiff

1
Günümüzde kullanabileceğiniz çoğu kutudapgrep -ai sshd
ccpizza

@ccpizza: pgrep: invalid option -- 'i'Ubuntu 14.04 tarihinde.
Martin Schröder

2
@ MartinSchröder: -isadece mac / bsd tatlarında kullanılabilir. ubuntu'da kullanabilirsiniz pgrep -af ssd. Ayrıntılar için serverfault.com/a/883270/116777
adresine

@HaydenSchiff'e benzer şekilde, bağlantı noktası iletme için yalnızca açık bir SSH Tüneli olan ve kabuksuz kullanıcıları bulmam gerekiyordu. Bu yardımcı oldu!
Tobias K.


7

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 ttyveya 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)

Bash globals ile ilgili önceki cevapları genişletmek. Dünyaya atıfta bulunmayı önerebilirim SECONDS. Bunu echo $SECONDS, algılanan bağlantıdan bu yana zaman miktarını gösteren üzerinden kullanabilirsiniz
NerdOfCode

Bu, o anda aktif olan oturum için yazdığınız bilgileri görüntüler. Ama soru listelemek için nasıl sorar tüm halen bağlı oturumları.
G-Man

6

@ Sebelin kullanıcısının yanıtı:

Kullanılan çözüm netstatiyi bir çözümdür ancak kök ayrıcalıkları gerektirir. Ek olarak, net-tools( netstatdaha 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

2

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ı.


1
... ama mutlaka aktif oturumların bir listesi olmayacak (bu sorunun ne hakkında olduğu). Giriş etkinliğine bağlı olarak, koştuğunuz oturum bile lastlistelenmemiş olabilir.
muru

1
"last -p now" şimdiki tüm ssh oturumlarını listeler.
JO Williams 5

@JOWilliams Hangi sürümleri lastdestekler -p? Bu ne işe yarıyor?
mwfearnley

@mwfearnley sürümü "last from util-linux 2.31.1"kesin olarak var.
V.7
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.