Câu trả lời:
who
hoặc w
; who -a
Để biết thêm thông tin chi tiết.
Các lệnh này chỉ hiển thị tất cả các phiên đăng nhập trên thiết bị đầu cuối. Một phiên SSH sẽ nằm trên một nô lệ đầu cuối giả ( pts
) như được hiển thị trong TTY
cột, nhưng không phải tất cả các kết nối pts đều là các phiên SSH. Chẳng hạn, các chương trình tạo ra một thiết bị đầu cuối giả như xterm
hoặc screen
sẽ hiển thị dưới dạng pts
. Xem Sự khác biệt giữa pts và tty để biết mô tả rõ hơn về các giá trị khác nhau được tìm thấy trong TTY
cột. Hơn nữa, cách tiếp cận này sẽ không hiển thị cho bất kỳ ai đăng nhập vào phiên SFTP, vì các phiên SFTP không phải là phiên đăng nhập.
Tôi không biết cách nào để hiển thị rõ ràng tất cả các phiên SSH. Bạn có thể suy luận thông tin này bằng cách đọc thông tin đăng nhập từ utmp
/ wtmp
thông qua một công cụ như last
, w
hoặc who
như tôi vừa mô tả hoặc bằng cách sử dụng các công cụ mạng như @sebelk được mô tả trong câu trả lời của họ để tìm các kết nối tcp mở trên cổng 22 (hoặc bất cứ nơi nào SSH của bạn daemon (s) đang / đang lắng nghe).
Cách tiếp cận thứ ba bạn có thể thực hiện là phân tích đầu ra nhật ký từ trình nền SSH. Tùy thuộc vào phân phối HĐH, phân phối SSH, cấu hình, v.v., đầu ra nhật ký của bạn có thể ở một số nơi khác nhau. Trên hộp RHEL 6, tôi tìm thấy các bản ghi trong /var/log/sshd.log
. Trên hộp RHEL 7 và trên hộp Arch Linux, tôi cần sử dụng journalctl -u sshd
để xem nhật ký. Một số hệ thống có thể xuất nhật ký SSH sang syslog. Nhật ký của bạn có thể ở những nơi này hoặc ở nơi khác. Đây là một ví dụ về những gì bạn có thể thấy:
[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
Nhật ký hiển thị khi phiên mở và đóng, phiên thuộc về ai, nơi người dùng đang kết nối và hơn thế nữa. Tuy nhiên, bạn sẽ phải thực hiện nhiều phân tích cú pháp nếu bạn muốn lấy điều này từ nhật ký sự kiện đơn giản, dễ đọc của con người sang danh sách các phiên hiện đang hoạt động và có lẽ nó vẫn không phải là một danh sách chính xác khi bạn đã hoàn thành phân tích cú pháp, vì nhật ký không thực sự chứa đủ thông tin để xác định phiên nào vẫn hoạt động - về cơ bản bạn chỉ đang đoán. Lợi thế duy nhất bạn có được bằng cách sử dụng các nhật ký này là thông tin đến trực tiếp từ SSHD thay vì thông qua nguồn cũ như các phương pháp khác.
Tôi khuyên bạn chỉ nên sử dụng w
. Hầu hết thời gian, điều này sẽ giúp bạn có được thông tin bạn muốn.
Bạn có thể thấy mọi phiên ssh với lệnh sau:
[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
Có lẽ điều này có thể hữu ích:
[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'
trên Ubuntu 14.04.
-i
chỉ có sẵn trên các hương vị mac / bsd. trên Ubuntu bạn có thể sử dụng pgrep -af ssd
. Xem serverfault.com/a/883270/116777 để biết chi tiết
Bạn cũng có thể dùng
ps ax | grep sshd
Thêm vào để tham khảo đơn giản.
Nếu bạn đang ở trong vỏ giả (ví dụ: / dev / pts / 0), một trong những cách đơn giản nhất sẽ là:
[user1@host ~]$ echo $SSH_CONNECTION
Nó sẽ trả về: ip và cổng của bạn và ip mà bạn đã kết nối và cổng
192.168.0.13 50473 192.168.0.22 22
Bạn cũng có thể nhận được một số thông tin từ việc sử dụng tty
hoặc who
( w
): (chỉnh sửa: Tôi thấy bây giờ danh sách này ở trên trong một bài đăng khác)
[user1@host ~]$ who
user1 tty1 2018-01-03 18:43
user2 pts/0 2018-01-03 18:44 (192.168.0.13)
SECONDS
toàn cầu. Bạn có thể sử dụng thông qua này echo $SECONDS
, sau đó nó sẽ hiển thị lượng thời gian, kể từ khi kết nối được nhận biết
Mở rộng câu trả lời của @ sebelk:
Giải pháp sử dụng netstat
là một giải pháp tốt nhưng đòi hỏi quyền root. Ngoài ra, net-tools
gói (cung cấp netstat
) không được dùng trong một số bản phân phối Linux mới hơn ( https://dougvitale.wordpress.com/2011/12/21/deprecated-linux-networking-commands-and-their-replacements/ ).
Một giải pháp thay thế là sau đó sử dụng thay thế cho netstat
, ss
. Ví dụ: (lưu ý bạn không còn cần 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
Bạn có thể dùng
last | head
Tôi đã sử dụng điều này trong tập lệnh .login của mình trong nhiều năm để xem ai mới đăng nhập vào hệ thống. Đó là một thiết bị bảo mật kém để xem ai đó có trên hệ thống bằng thông tin đăng nhập của bạn hay không.
last
có thể không được liệt kê.
last
hỗ trợ -p
nào? Nó làm gì?
"last from util-linux 2.31.1"
có nó chắc chắn.
who -a
lệnh