Detenga condicionalmente el inicio de sesión ssh interactivo y no interactivo y muestre un mensaje de error

Detenga condicionalmente el inicio de sesión ssh interactivo y no interactivo y muestre un mensaje de error

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 --noprofileopció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.soejecuta el script de shell y stdoutenví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.

información relacionada