Quản lý kết nối SSH


9

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ể?


Bạn có quan tâm đến các kết nối SSH đến hoặc đi? hoặc cả hai?
Shawn Chin

2
Câu hỏi này có liên quan nhiều hơn đến siêu người dùng

Tôi chỉ quan tâm đến các kết nối đến.
Cerin

Câu trả lời:


13

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 whovà 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 -utùy chọn whocũ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.


1
-usẽ cung cấp cho bạn PID.
gravyface

điều này không hiển thị IP nếu có nhiều kết nối trên một người dùng
Ai đó

Vì một số lý do, điều này đã không làm việc. Từ một máy từ xa, tôi đã đăng nhập vào máy bằng ssh và trong máy của tôi, tôi đã thực hiện a 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
Neo M Hacker

8

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

3
Sử dụng lsof -i tcp:22và bạn sẽ không cần grep.
Shawn Chin

Chỉ khi bạn chạy sshvà không chỉ định -ptùy chọn ..
Jindra Helcl

1

Để 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 bashphiê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.


Tôi không có kết nối hoạt động trên máy hiện tại của mình, nhưng netstat vẫn liệt kê kết nối tcp và tcp6. Tôi sẽ làm gì với PID của sshd? Có phải bạn đang ám chỉ tôi nên giết toàn bộ máy chủ SSH chỉ để hủy một kết nối?
Cerin

@Cerin Hai kết nối đó cho thấy rằng nó đang lắng nghe trên các cổng đó (chỉ)

Bạn đã không chỉ định, nhưng tôi shoul có mặc dù nó. Xin lỗi: /
Hãy đối xử tốt với mod của bạn.

0

Thử cái này:

$ ps aux | grep sshd

Để ngắt kết nối chúng, bạn có thể kill PID( PIDId 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.


Điều này chỉ cho thấy sshd đang chạy và người dùng kết nối được thiết lập với (không phải số lượng kết nối, IP của nó là gì)
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.