
quiero prevenirinteractivoyno interactivoInicio de sesión ssh basado en una lógica condicional. Necesito probar el nombre de usuario y dar un mensaje de error.
Las personas que usan sftp (ssh no interactivo) también deberían estar sujetas a la prueba de suerte.
¿Cómo implementaría eso? Tengo control total del sistema.
Intenté usar sshd ForceCommand, pero segúnhttps://stackoverflow.com/a/33714333/746461No funciona para Notty.
No estoy familiarizado con PAM y dudo que PAM pueda generar un mensaje de error personalizado en caso de que el inicio de sesión sea interactivo.
https://linuxhint.com/understanding_bash_shell_configuration_startup/dice que el shell de inicio de sesión no interactivo con --noprofile
opción puede omitir todos los archivos de configuración de bash. Por eso no puedo escribir mi lógica allí.
Respuesta1
Me di cuenta de. Puedo implementar un módulo PAM para hacer eso.
Guarde lo siguiente en, digamos, un archivo /root/checkConnections
.
#! /bin/bash
limit=$1
c=$(pgrep -xcu $PAM_USER sshd)
if [[ $c -ge "$limit" ]]; then
echo "Max $limit ssh connections allowed, but you have $c."
exit 1
fi
Luego en /etc/pam.d/sshd, agregue
session required pam_exec.so stdout /root/checkConnections 5
pam_exec.so
ejecuta el script de shell y stdout
envía mensajes al usuario terminal.
Cuando la condición falla, el efecto es el siguiente.
$ ssh localhost
Welcome to Ubuntu 20.04.2 LTS (GNU/Linux 5.4.0-74-generic x86_64)
94 updates can be installed immediately.
0 of these updates are security updates.
To see these additional updates run: apt list --upgradable
Max 5 ssh connections allowed, but you have 5.
/root/checkConnections failed: exit code 1
Last login: Thu Jun 24 12:19:27 2021 from 172.18.33.67
Connection to localhost closed.