如何限制SSH用户在已登录状态下无法再次登录?
如何限制SSH用户在已登录状态下无法再次登录?
嗨,这个需求其实挺实用的,我来给你分享两个靠谱的实现方案,你可以根据自己的场景选:
方法一:通过SSH配置文件直接限制
这种方法不用依赖额外模块,直接修改SSH服务的配置就能搞定:
- 先打开SSH的主配置文件,用你习惯的编辑器就行,比如:
sudo nano /etc/ssh/sshd_config - 如果只想针对单个用户(比如你的用户
amir),就在文件末尾添加以下配置块:
要是想给所有用户都加上这个限制,就直接在全局配置里把Match User amir MaxSessions 1 MaxStartups 1:0:0MaxSessions改成1(注意别和其他Match块冲突)。
这里解释下:MaxSessions限制单个连接的会话数,MaxStartups则是限制该用户的并发连接尝试,后面的1:0:0表示超过1个连接后直接拒绝,不等待。 - 配置改完后,重启SSH服务让生效:
# 不同系统命令可能略有不同,比如Ubuntu用service ssh restart sudo systemctl restart sshd
方法二:通过PAM模块限制登录数
这种方法是利用系统的PAM认证机制,灵活性更高,还能和其他登录方式一起限制:
- 先打开登录限制配置文件:
或者你也可以在sudo nano /etc/security/limits.conf/etc/security/limits.d/目录下新建一个自定义文件,比如90-ssh-single-login.conf,这样后续管理更方便。 - 添加一行限制规则,比如针对用户
amir:
这里amir hard maxlogins 1hard表示强制生效的限制,maxlogins 1就是最多允许1个登录会话;如果要对所有用户生效,把amir换成*就行。 - 确保SSH服务会加载这个PAM规则,打开
/etc/pam.d/sshd文件,检查是否有这一行:
要是没有就加上,然后同样重启SSH服务生效。session required pam_limits.so
验证是否生效
你可以先登录一次SSH,然后再开一个终端尝试用同一个用户登录,这时候应该会直接被拒绝,或者收到类似“Too many logins for 'amir'”的提示。也可以用who或者last amir命令查看当前登录状态,确认限制已经起作用。
备注:内容来源于stack exchange,提问作者Amir Hosein Saghi
相关产品推荐
相关产品推荐

