Trên máy chủ Linux, làm cách nào tôi có thể tìm thấy danh sách tất cả các kết nối SSH hiện tại hoặc ngắt kết nối SSH cụ thể?
Trên máy chủ Linux, làm cách nào tôi có thể tìm thấy danh sách tất cả các kết nối SSH hiện tại hoặc ngắt kết nối SSH cụ thể?
Câu trả lời:
Nếu bạn dự định thực hiện việc này một cách tương tác, đơn giản nhất sẽ chỉ đơn giản là gọi who
và xem liệu có bất kỳ người dùng nào từ một máy chủ từ xa không.
[you@host]$ who
user1 :0 Feb 8 09:45
user1 pts/1 Feb 14 17:56 (:0.0)
malcolm pts/3 Feb 15 17:50 (cockpit.serenity.com)
reynold pts/2 Feb 15 17:48 (host123.firefly.co.uk)
Điều này tất nhiên không phải là hoàn hảo, nhưng cực kỳ đơn giản để đánh máy theo yêu cầu và dễ dàng xử lý bằng mắt người.
Như @gravyface đã chỉ ra, nếu bạn bao gồm một -u
tùy chọn who
cũng sẽ in ra PID được liên kết mà sau đó bạn có thể chuyển qua kill
để chấm dứt kết nối.
-u
sẽ cung cấp cho bạn PID.
who -u
. Giết pid không chấm dứt kết nối trên máy từ xa của tôi. Tuy nhiên, sau khi tôi đã lsof -i | grep ":ssh"
đề xuất trong câu trả lời của @kce, tôi đã nhận được một pid khác; giết quá trình đó chấm dứt kết nối. Có thể có nhiều quá trình được bắt đầu do kết nối ssh và giết chết quá trình được hiển thị bởi người không chấm dứt kết nối; đó là lời giải thích của tôi
Làm thế nào về việc sử dụng lsof?
# lsof -i |grep ":ssh"
sshd 1943 root 3u IPv6 5698 TCP *:ssh (LISTEN)
sshd 1943 root 4u IPv4 5700 TCP *:ssh (LISTEN)
sshd 3217 root 3r IPv4 9687 TCP www.example.com:ssh->192.168.61.11:7341 (ESTABLISHED)
sshd 3220 user1 3u IPv4 9687 TCP www.example.com:ssh->192.168.61.11:7341 (ESTABLISHED)
sshd 3327 root 3r IPv4 10595 TCP www.example.com:ssh->192.168.61.11:7385 (ESTABLISHED)
sshd 3330 user2 3u IPv4 10595 TCP www.example.com:ssh->192.168.61.11:7385 (ESTABLISHED)
Sau đó, bạn sẽ có thể tắt kết nối vi phạm (ví dụ: để ngắt kết nối user2):
# kill -9 3330
lsof -i tcp:22
và bạn sẽ không cần grep.
ssh
và không chỉ định -p
tùy chọn ..
Để xem các kết nối ssh bạn có thể làm a netstat -atn | grep ':22'
. Nó hiển thị tất cả các kết nối trên cổng 22.
Để hủy kết nối, bạn có thể thử tìm PID của sshd (SSH Daemon) với ps-ax
.
Chỉnh sửa: Tôi nghĩ rằng bạn có thể tìm thấy PID của bash
phiên của họ (hoặc shell tương đương). Giết nó nên thả chúng đi.
Một tài nguyên khác: chủ đề này có một số lời khuyên về chủ đề này.
Thử cái này:
$ ps aux | grep sshd
Để ngắt kết nối chúng, bạn có thể kill PID
( PID
Id quá trình ở đâu trong cột thứ hai), nếu bạn có quyền root hoặc là người dùng đang nghi vấn.