私の会社には、1つのサーバーアプリケーションを実行するという要件があり、すべてのユーザーがパテ端末を介してそれにアクセスしています。20個のパテ端末のみを開くシェルスクリプトを記述したいと思います。21番目の端末が開いている場合、その端末をすぐに閉じたいと思います。
どうすればこれを達成できますか?
私を助けてください。
/etc/sshd_config
は20を超える許容セッション数を増やしたのですか?これはUbuntuのバグですか?
私の会社には、1つのサーバーアプリケーションを実行するという要件があり、すべてのユーザーがパテ端末を介してそれにアクセスしています。20個のパテ端末のみを開くシェルスクリプトを記述したいと思います。21番目の端末が開いている場合、その端末をすぐに閉じたいと思います。
どうすればこれを達成できますか?
私を助けてください。
/etc/sshd_config
は20を超える許容セッション数を増やしたのですか?これはUbuntuのバグですか?
回答:
/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
。そこに記載されているセッションは、システム上のログイン数ではなく、同じ接続を使用するポート転送(および複数のシェルを開くことなど)に関するものです。
Georgeのソリューションは正常に機能しますが、bashスクリプトを要求しました...
以下のようなオプションはありませんときに、他の状況のために、このいずれかを考えるMaxSessions
のはsshd
、あなたがこのようなものを使用することができます:
if [ "$(pgrep -cx processName)" -gt 20 ]; then pkill -xn processName; fi;
どちらpkill -n
の最新のインスタンスを殺すでしょうprocessName
。
この特別な状況に対する正しい解決策は、ジョージの答えです。
私は詳細にテストすることにしました Ravexinaのアイデアを練り上げて。確立されたssh接続の数をまったく制限したい場合に有効です。
最初に、接続なしでsshデーモンが実行されているときに、1つのsshd
プロセスがあることがわかりました。新しい接続ごとに、2つの新しいsshd
プロセスが作成されます。したがって、20接続の制限が必要な場合、しきい値は20ではなく41(1 + 2x20)である必要があります。
次に、という名前の実行可能ファイルを作成しました。次のようになります。/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
問題は明確ではありません。最初に私がそれをどのように理解し、どのようにIMOに質問するべきか教えてください:
1つのサーバーが特定のアプリケーションを提供するローカルネットワークがあります。私たちのチームは、PuTTYを使用して、コンピューターからサーバーへのssh接続経由でこのアプリケーションにアクセスします。各チームメンバーには、ssh接続を確立するために使用される独自のユーザーアカウントがあります(または、すべてのチームメンバーが共通のユーザーアカウントを使用します)。
チームメンバーは他の目的でサーバーを使用しないため、特定のユーザーがまだどのくらいの接続を確立していても(または、ユーザーあたり20接続)、ssh接続の数を20に制限します。
その解釈が正しい場合、おそらく要件を満たすための正しい方法は、ユーザーグループを作成し、そのグループにすべてのユーザーアカウントを追加し、を介してmaxloginの数を制限することです/etc/security/limits.conf
。
たとえば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
次の行を追加して、グループ全体のmaxlogins /etc/security/limits.conf
を制限します。
%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に設定します