Tôi đã quyết định xây dựng và thử nghiệm ý tưởng của Ravexina . Nó hoạt động và nó hiệu quả nếu bạn muốn hạn chế số lượng kết nối ssh được thiết lập ở tất cả.
Đầu tiên tôi tìm thấy khi ssh daemon đang chạy mà không có kết nối nào, có một sshd
tiến trình. Đối với mỗi kết nối mới, hai sshd
quy trình mới được tạo ra. Vì vậy, nếu bạn muốn giới hạn 20 kết nối, ngưỡng phải là 41 (1 + 2x20) thay vì 20.
Sau đó, tôi đã tạo một tệp thực thi, được đặt tên , trông như sau:/usr/local/bin/limit-sshd
#!/bin/sh
if [ "$(pgrep -cx sshd)" -gt 7 ]
then
echo '\nThe limit was reached!\n'
pkill -xn sshd
fi
- Ngưỡng ở đây là 7, tương ứng chỉ có 3 kết nối có thể được thiết lập và phần còn lại sẽ bị hủy.
Cuối cùng tôi đã thêm chỉ thị sau vào /etc/ssh/sshd_config
:
ForceCommand /usr/local/bin/limit-sshd; $SHELL
- Biến
$SHELL
sẽ thực thi shell người dùng mặc định.
- Một tác dụng không mong muốn là thông điệp chào mừng không còn nữa.
- Đừng quên khởi động lại daemon ssh:
sudo systemctl restart sshd.service
Đây là cách nó hoạt động ( nhấp vào hình ảnh để xem bản demo hoạt hình ):
Hơn nữa, tôi nhận ra rằng chúng ta không cần phải giết bất cứ điều gì, nếu chúng ta sửa đổi tập lệnh theo cách này:
#!/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
Và tương ứng /etc/ssh/sshd_config
theo cách này:
ForceCommand /usr/local/bin/limit-sshd
MaxSessions
trường