Jawaban:
who
atau w
; who -a
untuk informasi tambahan.
Perintah-perintah ini hanya menunjukkan semua sesi login pada perangkat terminal. Sesi SSH akan berada pada slave pseudo-terminal ( pts
) seperti yang ditunjukkan pada TTY
kolom, tetapi tidak semua koneksi Poin adalah sesi SSH. Misalnya, program yang membuat perangkat terminal semu seperti xterm
atau screen
akan ditampilkan sebagai pts
. Lihat Perbedaan antara Poin dan tty untuk deskripsi yang lebih baik dari nilai yang berbeda yang ditemukan di TTY
kolom. Selain itu, pendekatan ini tidak akan menunjukkan siapa pun yang masuk ke sesi SFTP, karena sesi SFTP bukan sesi masuk shell.
Saya tidak tahu cara untuk secara eksplisit menunjukkan semua sesi SSH. Anda dapat menyimpulkan informasi ini dengan membaca informasi masuk dari utmp
/ wtmp
melalui alat seperti last
,, w
atau who
seperti yang baru saja saya jelaskan, atau dengan menggunakan alat jaringan seperti @sebelk yang dijelaskan dalam jawaban mereka untuk menemukan koneksi tcp terbuka pada port 22 (atau di mana pun SSH Anda daemon sedang mendengarkan.
Pendekatan ketiga yang bisa Anda ambil adalah mengurai output log dari daemon SSH. Bergantung pada distribusi OS Anda, distribusi SSH, konfigurasi, dan sebagainya, output log Anda mungkin ada di sejumlah tempat berbeda. Pada kotak RHEL 6, saya menemukan log /var/log/sshd.log
. Pada kotak RHEL 7, dan juga pada kotak Arch Linux, saya perlu menggunakan journalctl -u sshd
untuk melihat log. Beberapa sistem mungkin menampilkan log SSH ke syslog. Log Anda mungkin ada di tempat-tempat ini atau di tempat lain. Berikut contoh apa yang mungkin Anda lihat:
[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
Log menunjukkan kapan sesi dibuka dan ditutup, dari siapa sesi itu berasal, dari mana pengguna terhubung, dan banyak lagi. Namun, Anda harus melakukan banyak penguraian jika Anda ingin mendapatkan ini dari log peristiwa sederhana yang dapat dibaca manusia ke daftar sesi aktif saat ini, dan itu masih mungkin tidak akan menjadi daftar yang akurat ketika Anda sudah selesai melakukan parsing, karena log sebenarnya tidak mengandung informasi yang cukup untuk menentukan sesi mana yang masih aktif - Anda pada dasarnya hanya menebak. Satu-satunya keuntungan yang Anda peroleh dengan menggunakan log ini adalah bahwa informasi tersebut datang langsung dari SSHD daripada melalui sumber bekas seperti metode lainnya.
Saya sarankan hanya menggunakan w
. Sebagian besar waktu, ini akan memberi Anda informasi yang Anda inginkan.
Anda dapat melihat setiap sesi ssh dengan perintah berikut:
[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
O mungkin ini mungkin berguna:
[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'
di Ubuntu 14.04.
-i
hanya tersedia untuk citarasa mac / bsd. di ubuntu bisa Anda gunakan pgrep -af ssd
. Lihat serverfault.com/a/883270/116777 untuk detail
Anda juga bisa menggunakan
ps ax | grep sshd
Ditambahkan untuk referensi sederhana.
Jika Anda menggunakan shell semu (contoh: / dev / pts / 0) salah satu cara paling sederhana adalah:
[user1@host ~]$ echo $SSH_CONNECTION
Seharusnya kembali: ip dan port Anda dan ip Anda terhubung ke dan port
192.168.0.13 50473 192.168.0.22 22
Anda juga dapat memperoleh beberapa informasi dari menggunakan tty
atau who
( w
): (edit: Saya melihat sekarang daftar di atas di pos lain)
[user1@host ~]$ who
user1 tty1 2018-01-03 18:43
user2 pts/0 2018-01-03 18:44 (192.168.0.13)
SECONDS
global. Anda dapat menggunakan ini via echo $SECONDS
, yang kemudian menampilkan jumlah waktu, sejak koneksi yang dirasakan
Memperluas jawaban @ sebelk:
Solusi yang digunakan netstat
adalah solusi yang bagus tetapi membutuhkan hak akses root. Selain itu, net-tools
paket (yang menyediakan netstat
) sudah tidak digunakan lagi di beberapa distro Linux yang lebih baru ( https://dougvitale.wordpress.com/2011/12/21/deprecated-linux-networking-commands-and-their-replacements/ ).
Sebuah solusi alternatif adalah kemudian untuk menggunakan pengganti netstat
, ss
. Misalnya (perhatikan bahwa Anda tidak lagi memerlukan root):
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
Anda dapat gunakan
last | head
Saya menggunakan ini dalam skrip .login saya selama bertahun-tahun untuk melihat siapa yang baru saja masuk ke sistem. Itu adalah perangkat keamanan yang buruk untuk melihat apakah seseorang berada di sistem menggunakan login Anda.
last
mungkin tidak terdaftar.
last
dukungan apa -p
? Apa fungsinya?
"last from util-linux 2.31.1"
sudah pasti.
who -a
perintah