我在我的 Ubuntu VPS 上创建了一群用户,仅使用以下命令进行 SSH 隧道连接:(取自这里)
sudo adduser someuser --shell=/bin/false --no-create-home
一切按预期顺利运行。这些用户没有 shell 访问权限,只能使用隧道功能。我需要根据用户名/maxlogin 限制这些用户。我希望每个用户只能在一个登录会话中使用它。(这样同一个帐户就不会被使用两次)
我尝试过编辑/etc/security/limits.conf
someuser hard maxlogins 1
但它不起作用。我已尝试对普通用户(具有 shell 访问权限)执行此操作,并且确实有效。因此它仅对我的受限用户不起作用。运行who
也不会显示在线 SSH 隧道用户。
是否可以限制每次登录的此类用户?
答案1
好的。感谢您的回复。我的消息被删除了,因为我的声誉不足以“以评论形式”提出我的问题!我不知道 stackexchange 是否会修复其规则以支持没有声誉的评论。
无论如何,我还找到了通过运行一些 bash 来解决问题的方法:https://askubuntu.com/questions/1347714/conditionally-stop-interactive-and-non-interactive-ssh-login-and-give-error-mess
主要思想是每次 sshd 登录时运行一个脚本来检查特定条件(这里是过去活动的 sshd 数量)。因此,首先我们需要将脚本保存在一个文件中,例如 /root/checkConnections。
#! /bin/bash
limit=$1
c=$(pgrep -xcu $PAM_USER sshd)
if [[ $c -ge "$limit" ]]; then
echo "Max $limit ssh connections allowed, but you have $c."
exit 1
fi
不要忘记使其可执行。现在,通过在 /etc/pam.d/sshd 中添加以下内容,您可以在每个 sshd 会话中运行此脚本:
session required pam_exec.so stdout /root/checkConnections 5
简而言之,在每个会话中,pam_exec.so 都会运行脚本,如果超出限制(此处为 5),则脚本会失败。除了 stdout,还可以使用日志文件(通过将 stdout 替换为 log=file.log)来记录输出消息。请记住,这也会为 root 设置限制。因此,如果您想要更复杂的指令,则必须根据需要更改 checkConnections。