管理SSH连接


Answers:


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,然后您可以将其传递给该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。
肖恩·钦

只有当你运行ssh并没有指定-p选项..
Jindra Helcl

1

要查看ssh连接,您可以执行netstat -atn | grep ':22'。它显示了端口22上的所有连接。

要断开连接,您可以尝试使用查找sshd(SSH守护程序)的PID ps-ax

编辑:我认为您可以找到他们bash会话的PID (或等效的Shell)。杀了他们应该没事了。

另一个资源:该主题对此主题有一些提示。


我当前的机器上没有活动的连接,但是netstat仍然列出了tcp和tcp6连接。我应该如何处理sshd的PID?您是在暗示我应该为了删除单个连接而杀死整个SSH服务器吗?
Cerin

@Cerin这两个连接表明它正在侦听这些端口(仅)

您没有指定,但我应该拥有它。抱歉:/
请妥善对待您的mod。

0

尝试这个:

$ ps aux | grep sshd

如果您具有root特权,或者是有问题的用户,则可以断开它们的连接kill PIDPID第二列的进程ID在哪里)。


这仅显示sshd正在运行,并且用户与之建立了连接(不是连接数,其连接的IP)
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.