我的公司要求我运行一个服务器应用程序,所有用户都可以通过腻子终端对其进行访问。我想编写一个仅应打开20个腻子终端的shell脚本。如果第21个终端打开,那么我想立即关闭该终端。
我该如何实现?
请帮我。
/etc/sshd_config,或者这是Ubuntu错误?
我的公司要求我运行一个服务器应用程序,所有用户都可以通过腻子终端对其进行访问。我想编写一个仅应打开20个腻子终端的shell脚本。如果第21个终端打开,那么我想立即关闭该终端。
我该如何实现?
请帮我。
/etc/sshd_config,或者这是Ubuntu错误?
Answers:
/etc/sshd_config在服务器端编辑您的内容并更改行:
#MaxSessions 10
至
MaxSessions 20
见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.
MaxSessions 20。提到的会话涉及使用相同连接进行端口转发(甚至打开多个shell)之类的事情,而不是系统上的登录次数。
George的解决方案效果很好,但是您要求使用bash脚本...
因此,在没有诸如MaxSessionsof之类的选项的其他情况下,请考虑使用此方法sshd,然后可以使用以下方法:
if [ "$(pgrep -cx processName)" -gt 20 ]; then pkill -xn processName; fi;
这pkill -n将杀死的最新实例processName。
对于这种特殊情况的正确解决方案是乔治的答案。
我已经决定详细阐述和检验Ravexina的想法。如果您想完全限制已建立的ssh连接的数量,它会起作用并且非常有效。
首先,我发现ssh守护程序在没有任何连接的情况下运行时,存在一个sshd进程。对于每个新连接sshd,创建两个新过程。因此,如果要限制20个连接,则阈值应为41(1 + 2x20)而不是20。
然后,我创建了一个名为的可执行文件,该文件如下所示:/usr/local/bin/limit-sshd
#!/bin/sh
if [ "$(pgrep -cx sshd)" -gt 7 ]
then
echo '\nThe limit was reached!\n'
pkill -xn sshd
fi
最后,我将以下指令添加到/etc/ssh/sshd_config:
ForceCommand /usr/local/bin/limit-sshd; $SHELL
$SHELL将执行默认用户的外壳程序。sudo systemctl restart sshd.service 这是它的工作原理(单击图像以查看动画演示):
此外,我意识到如果以这种方式修改脚本,则无需杀死任何内容:
#!/bin/sh
if [ "$(pgrep -cx sshd)" -gt 7 ]
then
echo '\nThe limit was reached!\n'
exit # This line is not mandatory
else
eval "$SHELL"
fi
并且分别/etc/ssh/sshd_config以这种方式:
ForceCommand /usr/local/bin/limit-sshd
问题尚不清楚。首先,让我告诉我我如何理解它,以及应该以哪种方式向国际海事组织提出:
我们有一个服务器在其中提供特定应用程序的本地网络。我们的团队使用PuTTY通过SSH连接从其计算机到服务器访问此应用程序。每个团队成员都有自己的用户帐户,该用户帐户用于建立ssh连接(或者:所有团队成员都使用一个公共用户帐户)。
团队成员不会将服务器用于任何其他目的,并且我们希望将其ssh连接的数量限制为20,无论特定用户尚未建立多少连接(或者:每个用户20个连接)。
如果该解释正确,那么满足要求的正确方法可能是创建一个用户组,然后将所有用户帐户添加到该组中,并通过来限制maxlogins的数量/etc/security/limits.conf。
创建一个名为example的the-app-maxlogins组,其组ID为10 000:
sudo groupadd -g 10000 the-app-maxlogins将用户添加到该组- sudo adduser <user> <group>:
for user in "user1" "user2" "user3"; do sudo adduser "$user" the-app-maxlogins; done将下一行添加到/etc/security/limits.conf以限制整个组的maxlogins :
%the-app-maxlogins - maxlogins 20
或添加以下行以限制该组每个用户的最大登录数:
@the-app-maxlogins - maxlogins 20编辑/etc/ssh/sshd_config以下行并将其添加到文件的底部(!),以禁用该组的会话多路复用(在这种情况下,这可能不是强制性的):
Match Group the-app-maxlogins
MaxSessions 1无论通过ssh还是tty,此解决方案都将限制受影响用户的登录次数。如果您想将其应用于某个用户而不是某个组,只需添加一行作为后续内容,limits.conf或将其放置.conf在目录中的单独文件中/etc/security/limits.d/:
username - maxlogins 20
MaxSessions在此答案中提供了指令实际含义的简单说明。当前答案的主要来源是同一L&U问题下的另一个答案。
我的另一个答案可以某种方式提供解决方法,但这是一种有趣而不是真正的解决方案。
MaxSessions现场服务器上将ssh中允许访问的最大连接数设置为20