Pare condicionalmente o login ssh interativo e não interativo e forneça uma mensagem de erro

Pare condicionalmente o login ssh interativo e não interativo e forneça uma mensagem de erro

eu quero prevenirinterativoenão interativologin ssh baseado em uma lógica condicional. Preciso testar o nome de usuário e dar uma mensagem de erro.

Pessoas que utilizam sftp (ssh não interativo) também devem ser submetidas ao teste de sorte.

Como eu implementaria isso? Tenho controle total do sistema.

Tentei usar o sshd ForceCommand, mas de acordo comhttps://stackoverflow.com/a/33714333/746461não funciona para notty.

Não estou familiarizado com o PAM e duvido que o PAM possa gerar uma mensagem de erro personalizada caso o login seja interativo.

https://linuxhint.com/understanding_bash_shell_configuration_startup/diz que o shell de login não interativo com --noprofileopção pode ignorar todos os arquivos de configuração do bash. É por isso que não posso escrever minha lógica lá.

Responder1

Eu descobri. Posso implementar um módulo PAM para fazer isso.

Salve o seguinte em, digamos, arquivo /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

Então em /etc/pam.d/sshd, adicione

session required pam_exec.so stdout /root/checkConnections 5

pam_exec.soexecuta o script de shell e stdoutenvia mensagens para o usuário terimal.

Quando a condição falha, o efeito é assim.

$ 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.

informação relacionada