用于限制登录次数的 Bash 脚本

vij*_*289 12 command-line bash scripts

我的公司要求我运行一个服务器应用程序,所有用户都可以通过 putty 终端访问它。我想编写一个只应打开 20 个腻子终端的 shell 脚本。如果第 21 个终端打开,那么我想立即关闭该终端。

我怎样才能做到这一点?

请帮我。

Geo*_*sen 24

/etc/sshd_config在服务器端编辑您的并更改行:

#MaxSessions 10
Run Code Online (Sandbox Code Playgroud)

MaxSessions 20
Run Code Online (Sandbox Code Playgroud)

man sshd_config

 MaxSessions
         Specifies the maximum number of open shell, login or subsystem
         (e.g. sftp) sessions permitted per network connection.  Multiple
         sessions may be established by clients that support connection
         multiplexing.  Setting MaxSessions to 1 will effectively disable
         session multiplexing, whereas setting it to 0 will prevent all
         shell, login and subsystem sessions while still permitting for-
         warding.  The default is 10.
Run Code Online (Sandbox Code Playgroud)

  • 一段时间以来,我一直想在我的一台旧笔记本电脑上设置 SSSH 东西。手册页是否说默认情况下只有 10 个用户可以登录服务器?即使在 80 年代,我们也可以让 100 名用户登录到具有 2 MB RAM 的 IBM S/36 微型计算机。 (2认同)
  • 您将开放终端(参见 OP)中的会话与 SSH 连接内的会话混淆了。您提到的设置是关于单个 ssh 连接允许多少个“子连接”。因此,即使使用“MaxSessions 20”,运行 30 个“ssh”命令也没有问题。那里提到的会话是关于使用相同连接的端口转发(甚至打开多个 shell)之类的事情,而不是关于系统上的登录次数。 (2认同)

Rav*_*ina 5

George 的解决方案运行良好,但是您要求使用 bash 脚本...

因此,当没有诸如MaxSessionsof 之类的选项时,请考虑将其用于其他情况sshd,然后您可以使用以下内容:

if [ "$(pgrep -cx processName)" -gt 20 ]; then pkill -xn processName; fi; 
Run Code Online (Sandbox Code Playgroud)

pkill -n将杀死processName.

这种特殊情况的正确解决方案是乔治的答案。

  • 然后——鉴于 bash 分叉了很多子进程,并且他们想要限制用户,而不是进程——这似乎不是一个有用的答案。 (2认同)