Я решил разработать и протестировать Ravexina «s идеи . Это работает, и это эффективно, если вы хотите ограничить количество установленных соединений 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
- Порог здесь равен 7, соответственно может быть установлено только 3 соединения, а остальное будет сброшено.
Наконец, я добавил следующую директиву /etc/ssh/sshd_config
:
ForceCommand /usr/local/bin/limit-sshd; $SHELL
- Переменная
$SHELL
выполнит оболочку пользователя по умолчанию.
- Нежелательный эффект заключается в том, что приветственное сообщение больше не доступно.
- Не забудьте перезапустить демон ssh:
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
MaxSessions
поле