Mon entreprise a l'exigence d'avoir une application serveur en cours d'exécution, à laquelle tous les utilisateurs y accèdent via un terminal de mastic. Je veux écrire un script shell que seulement 20 terminaux de mastic devraient être ouverts. Si le 21e terminal s'ouvre, je veux le fermer immédiatement.
Comment puis-je atteindre cet objectif?
Aidez-moi, s'il vous plaît.
command-line
bash
scripts
vijay12289
la source
la source
MaxSessions
terrain/etc/sshd_config
, ou est-ce un bug Ubuntu?Réponses:
Modifiez votre
/etc/sshd_config
côté serveur et changez de ligne:à
Voir
man sshd_config
:la source
MaxSessions 20
. Les sessions mentionnées mentionnent des choses comme les transferts de port (et même l'ouverture de plusieurs shell) utilisant la même connexion, et non le nombre de connexions sur le système.La solution de George fonctionne bien mais vous avez demandé un script bash ...
Considérez donc celui-ci pour d'autres situations où il n'y a pas d'option comme celle
MaxSessions
desshd
, alors vous pouvez utiliser quelque chose comme ceci:Ce
pkill -n
qui tuera la dernière instance deprocessName
.La solution correcte à cette situation particulière est la réponse de George.
la source
J'ai décidé d'élaborer et de tester la Ravexina d » idée . Cela fonctionne et il est efficace si vous souhaitez restreindre le nombre de connexions ssh établies.
D'abord, j'ai trouvé que lorsque le démon ssh s'exécute sans aucune connexion, il y a un
sshd
processus. Pour chaque nouvelle connexion, deux nouveauxsshd
processus sont créés. Donc, si vous voulez limiter 20 connexions, le seuil doit être 41 (1 + 2x20) au lieu de 20.Ensuite, j'ai créé un fichier exécutable, nommé , qui ressemble à ceci:
/usr/local/bin/limit-sshd
Enfin, j'ai ajouté la directive suivante à
/etc/ssh/sshd_config
:$SHELL
exécutera le shell de l'utilisateur par défaut.sudo systemctl restart sshd.service
Voici comment cela fonctionne ( cliquez sur l'image pour voir une démo animée ):
De plus, j'ai réalisé que nous n'avons rien à tuer si nous modifions le script de cette manière:
Et respectivement
/etc/ssh/sshd_config
de cette façon:la source
La question n'est pas claire. Permettez-moi de dire d'abord comment je le comprends et de quelle manière, OMI, il convient de demander:
Si cette interprétation est correcte, probablement un moyen correct de satisfaire aux exigences est de créer un groupe d'utilisateurs , puis d'ajouter tous les comptes d'utilisateurs à ce groupe et de limiter le nombre de maxlogins via
/etc/security/limits.conf
.Créez un groupe, appelé par exemple
the-app-maxlogins
, avec l'ID de groupe10 000
:Ajoutez les utilisateurs à ce groupe -
sudo adduser <user> <group>
:Ajoutez la ligne suivante
/etc/security/limits.conf
pour limiter les maxlogins de l'ensemble du groupe :Ou ajoutez la ligne suivante pour limiter le nombre maximal de connexions par utilisateur du groupe :
Modifiez
/etc/ssh/sshd_config
et ajoutez les lignes suivantes en bas (!) Du fichier pour désactiver le multiplexage de session pour ce groupe (ce n'est probablement pas obligatoire dans ce cas):Cette solution limitera le nombre de connexions des utilisateurs concernés, peu importe via ssh ou tty. Si vous souhaitez l'appliquer à un certain utilisateur et non à un groupe, ajoutez simplement une ligne comme suit
limits.conf
ou placez-la dans un.conf
fichier séparé dans le répertoire/etc/security/limits.d/
:Une explication simple de la signification réelle de la directive
MaxSessions
est fournie dans cette réponse . La principale source de la réponse actuelle est une autre réponse sous la même question de L&U.L' autre réponse de la mienne, pourrait fournir une solution de contournement d'une certaine manière, mais c'est une sorte de solution amusante plutôt que vraie.
la source