การจัดการการเชื่อมต่อ SSH


9

บนเซิร์ฟเวอร์ Linux ฉันจะค้นหารายการการเชื่อมต่อ SSH ปัจจุบันทั้งหมดหรือตัดการเชื่อมต่อการเชื่อมต่อ SSH เฉพาะได้อย่างไร


คุณสนใจที่จะเชื่อมต่อ SSH ขาเข้าหรือขาออก? หรือทั้งคู่?
Shawn Chin

2
คำถามนี้เกี่ยวข้องกับsuperuser มาก

ฉันสนใจแค่การเชื่อมต่อเข้ามาเท่านั้น
Cerin

คำตอบ:


13

หากคุณวางแผนที่จะทำสิ่งนี้แบบโต้ตอบสิ่งที่ง่ายที่สุดคือการเรียกใช้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ยังเพื่อยุติการเชื่อมต่อ


1
-uจะให้ PID ให้คุณ
gravyface

สิ่งนี้จะไม่แสดง IP หากมีการเชื่อมต่อหลายรายการกับผู้ใช้รายเดียว
ใครบางคน

ด้วยเหตุผลบางอย่างสิ่งนี้ไม่ได้ผล จากเครื่องระยะไกลผมเข้าสู่เครื่องของฉันใช้ SSH who -uและในเครื่องของฉันฉันดำเนินการ การฆ่า pid ไม่ได้ยุติการเชื่อมต่อบนเครื่องระยะไกลของฉัน อย่างไรก็ตามหลังจากที่ฉันทำlsof -i | grep ":ssh" ตามคำแนะนำในคำตอบโดย @kce ฉันได้รับ pid ที่ต่างออกไป การฆ่ากระบวนการนั้นสิ้นสุดการเชื่อมต่อ อาจมีหลายกระบวนการที่เริ่มต้นเนื่องจากการเชื่อมต่อ ssh และฆ่ากระบวนการที่แสดงโดยผู้ที่ไม่ยุติการเชื่อมต่อ นั่นคือคำอธิบายของฉัน
Neo M Hacker

8

วิธีการเกี่ยวกับการใช้ 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

3
ใช้งานlsof -i tcp:22และคุณไม่จำเป็นต้องใช้ grep
Shawn Chin

เฉพาะในกรณีที่คุณเรียกใช้sshและไม่ระบุ-pตัวเลือก ..
Jindra Helcl

1

เพื่อดูการเชื่อมต่อ SSH netstat -atn | grep ':22'ที่คุณสามารถทำได้ มันแสดงให้เห็นการเชื่อมต่อทั้งหมดในพอร์ต 22

ที่จะลดการเชื่อมต่อคุณสามารถลองหา PID ของ sshd นี้ (SSH ภูต) ps-axด้วย

แก้ไข: ฉันคิดว่าคุณสามารถค้นหา PID ของbashเซสชันของพวกเขา(หรือเชลล์ที่เทียบเท่า) การฆ่าที่น่าจะทำให้พวกเขาตกลง

แหล่งข้อมูลอื่น: กระทู้นี้มีเคล็ดลับในเรื่อง


ฉันไม่มีการเชื่อมต่อที่ใช้งานอยู่บนเครื่องปัจจุบันของฉัน แต่ netstat ยังคงแสดงรายการการเชื่อมต่อ tcp และ tcp6 ฉันจะทำอย่างไรกับ PID ของ sshd คุณหมายถึงฉันควรจะฆ่าเซิร์ฟเวอร์ SSH ทั้งหมดเพื่อให้การเชื่อมต่อเดียวหล่นหรือไม่?
Cerin

@Cerin การเชื่อมต่อทั้งสองแสดงว่ากำลังฟังพอร์ตเหล่านั้น (เท่านั้น)

คุณไม่ได้ระบุ แต่ฉันจะได้รับมัน ขออภัย: /
โปรดรักษา mods ของคุณให้ดี

0

ลองสิ่งนี้:

$ ps aux | grep sshd

หากต้องการยกเลิกการเชื่อมต่อคุณสามารถทำได้kill PID(ซึ่งPIDเป็น ID กระบวนการในคอลัมน์ที่สอง) หากคุณมีสิทธิ์ใช้งานรูทหรือเป็นผู้ใช้ที่มีปัญหา


สิ่งนี้แสดงให้เห็นว่า sshd กำลังทำงานอยู่และผู้ใช้ที่สร้างการเชื่อมต่อด้วย (ไม่ใช่จำนวนการเชื่อมต่อ, IP ใดที่มาจาก)
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.