Moja firma wymaga, aby mieć uruchomioną jedną aplikację serwerową, do której wszyscy użytkownicy uzyskują dostęp za jej pośrednictwem za pomocą putty terminal. Chcę napisać skrypt powłoki, w którym powinien być otwarty tylko 20 kitowy terminal. Jeśli 21 terminal jest otwarty, chcę go natychmiast zamknąć.
Jak mogę to osiągnąć?
Proszę pomóż mi.
command-line
bash
scripts
vijay12289
źródło
źródło
MaxSessions
terenie/etc/sshd_config
, czy to jest błąd Ubuntu?Odpowiedzi:
Edytuj swoje
/etc/sshd_config
po stronie serwera i zmień wiersz:do
Zobacz
man sshd_config
:źródło
MaxSessions 20
. Wspomniane tam sesje dotyczą między innymi przekazywania portów (a nawet otwarcia więcej niż jednej powłoki) przy użyciu tego samego połączenia, a nie liczby logowań w systemie.Rozwiązanie George'a działa dobrze, jednak poprosiłeś o skrypt bash ...
Więc rozważyć tę jedną dla innych sytuacjach, gdy nie ma innej możliwości jak
MaxSessions
zsshd
, a następnie można użyć mniej więcej tak:Który
pkill -n
zabije najnowszą instancjęprocessName
.Prawidłowe rozwiązanie tej szczególnej sytuacji to odpowiedź George'a.
źródło
Zdecydowałem się opracować i przetestować Ravexina „s pomysł . Działa i jest skuteczny, jeśli chcesz w ogóle ograniczyć liczbę ustanowionych połączeń ssh.
Najpierw odkryłem, że gdy demon ssh działa bez połączenia, istnieje jeden
sshd
proces. Dla każdego nowego połączeniasshd
tworzone są dwa nowe procesy. Więc jeśli chcesz limit 20 połączeń, próg powinien wynosić 41 (1 + 2x20) zamiast 20.Następnie utworzyłem plik wykonywalny o nazwie , który wygląda następująco:
/usr/local/bin/limit-sshd
Wreszcie dodałem następującą dyrektywę do
/etc/ssh/sshd_config
:$SHELL
wykona domyślną powłokę użytkownika.sudo systemctl restart sshd.service
Oto jak to działa ( kliknij obraz, aby zobaczyć animowaną wersję demonstracyjną ):
Ponadto zdałem sobie sprawę, że nie musimy niczego zabijać, jeśli zmodyfikujemy skrypt w ten sposób:
I odpowiednio
/etc/ssh/sshd_config
w ten sposób:źródło
Pytanie nie jest jasne. Pozwól mi najpierw powiedzieć, jak to rozumiem i w jaki sposób, IMO, należy zapytać:
Jeśli ta interpretacja jest poprawna, prawdopodobnie poprawnym sposobem spełnienia wymagań jest utworzenie grupy użytkowników , a następnie dodanie wszystkich kont użytkowników do tej grupy i ograniczenie liczby maksymalnych logowań za pośrednictwem
/etc/security/limits.conf
.Utwórz grupę, np. O
the-app-maxlogins
identyfikatorze grupy10 000
:Dodaj użytkowników do tej grupy -
sudo adduser <user> <group>
:Dodaj kolejną linię
/etc/security/limits.conf
do ograniczenia tych maxlogins z całej grupy :Lub dodaj następujący wiersz, aby ograniczyć maksymalną liczbę logowania na użytkownika w grupie :
Edytuj
/etc/ssh/sshd_config
i dodaj następujące wiersze na dole (!) Pliku, aby wyłączyć multipleksowanie sesji dla tej grupy (prawdopodobnie nie jest to w tym przypadku obowiązkowe):To rozwiązanie ograniczy liczbę logowań dotkniętych użytkowników bez względu na ssh lub tty. Jeśli chcesz zastosować go dla określonego użytkownika, a nie dla grupy, po prostu dodaj wiersz jako kontynuację
limits.conf
lub umieść go w osobnym.conf
pliku w katalogu/etc/security/limits.d/
:MaxSessions
W tej odpowiedzi podano proste wyjaśnienie faktycznego znaczenia dyrektywy . Głównym źródłem obecnej odpowiedzi jest inna odpowiedź w ramach tego samego pytania L&U.Inna odpowiedź kopalni, mógłby stanowić obejście w jakiś sposób, ale jest to rodzaj zabawy, a nie prawdziwe rozwiązanie.
źródło