บนเซิร์ฟเวอร์ Linux ฉันจะค้นหารายการการเชื่อมต่อ SSH ปัจจุบันทั้งหมดหรือตัดการเชื่อมต่อการเชื่อมต่อ SSH เฉพาะได้อย่างไร
บนเซิร์ฟเวอร์ Linux ฉันจะค้นหารายการการเชื่อมต่อ SSH ปัจจุบันทั้งหมดหรือตัดการเชื่อมต่อการเชื่อมต่อ SSH เฉพาะได้อย่างไร
คำตอบ:
หากคุณวางแผนที่จะทำสิ่งนี้แบบโต้ตอบสิ่งที่ง่ายที่สุดคือการเรียกใช้who
และดูว่ามีผู้ใช้จากโฮสต์ระยะไกลหรือไม่
[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)
แน่นอนว่านี่ไม่ใช่สิ่งที่ไม่สามารถป้องกันได้ แต่เป็นเรื่องง่ายมากที่จะพิมพ์ตามความต้องการและประมวลผลด้วยสายตามนุษย์ได้อย่างง่ายดาย
ตามที่ @gravyface ชี้ให้เห็นหากคุณมี-u
ตัวเลือกwho
จะพิมพ์ PID ที่เกี่ยวข้องซึ่งคุณสามารถส่งผ่านไปkill
ยังเพื่อยุติการเชื่อมต่อ
-u
จะให้ PID ให้คุณ
who -u
และในเครื่องของฉันฉันดำเนินการ การฆ่า pid ไม่ได้ยุติการเชื่อมต่อบนเครื่องระยะไกลของฉัน อย่างไรก็ตามหลังจากที่ฉันทำlsof -i | grep ":ssh"
ตามคำแนะนำในคำตอบโดย @kce ฉันได้รับ pid ที่ต่างออกไป การฆ่ากระบวนการนั้นสิ้นสุดการเชื่อมต่อ อาจมีหลายกระบวนการที่เริ่มต้นเนื่องจากการเชื่อมต่อ ssh และฆ่ากระบวนการที่แสดงโดยผู้ที่ไม่ยุติการเชื่อมต่อ นั่นคือคำอธิบายของฉัน
วิธีการเกี่ยวกับการใช้ 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)
จากนั้นคุณควรจะสามารถฆ่าการเชื่อมต่อที่ละเมิด (เช่นเพื่อตัดการเชื่อมต่อ user2):
# kill -9 3330
lsof -i tcp:22
และคุณไม่จำเป็นต้องใช้ grep
ssh
และไม่ระบุ-p
ตัวเลือก ..
เพื่อดูการเชื่อมต่อ SSH netstat -atn | grep ':22'
ที่คุณสามารถทำได้ มันแสดงให้เห็นการเชื่อมต่อทั้งหมดในพอร์ต 22
ที่จะลดการเชื่อมต่อคุณสามารถลองหา PID ของ sshd นี้ (SSH ภูต) ps-ax
ด้วย
แก้ไข: ฉันคิดว่าคุณสามารถค้นหา PID ของbash
เซสชันของพวกเขา(หรือเชลล์ที่เทียบเท่า) การฆ่าที่น่าจะทำให้พวกเขาตกลง
แหล่งข้อมูลอื่น: กระทู้นี้มีเคล็ดลับในเรื่อง
ลองสิ่งนี้:
$ ps aux | grep sshd
หากต้องการยกเลิกการเชื่อมต่อคุณสามารถทำได้kill PID
(ซึ่งPID
เป็น ID กระบวนการในคอลัมน์ที่สอง) หากคุณมีสิทธิ์ใช้งานรูทหรือเป็นผู้ใช้ที่มีปัญหา