Условно останавливать интерактивный и неинтерактивный вход по ssh и выдавать сообщение об ошибке

Я хочу запретить интерактивные и неинтерактивный вход по ssh на основе условной логики. Мне нужно проверить имя пользователя и выдать сообщение об ошибке.

Люди, использующие sftp (неинтерактивный ssh), также должны пройти тест на удачу.

Как мне это реализовать? Я полностью контролирую систему.

Я пытался использовать sshd ForceCommand, но, согласно https://stackoverflow.com/a/33714333/746461 , это не работает.

Я не знаком с PAM и сомневаюсь, что PAM может выводить пользовательское сообщение об ошибке в случае интерактивного входа в систему.

https://linuxhint.com/understanding_bash_shell_configuration_startup/ говорит, что неинтерактивная оболочка входа с опцией - noprofile может обойти все файлы конфигурации bash. Поэтому я не могу написать там свою логику.

1
задан 23 June 2021 в 17:04

1 ответ

Я разобрался. Я могу реализовать для этого модуль PAM.

Сохраните следующее, скажем, в файле / 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

Затем в /etc/pam.d/sshd add

session required pam_exec.so stdout /root/checkConnections 5

pam_exec.so выполняет сценарий оболочки, stdout выводит сообщения пользователю terimal.

Когда условие не выполняется, эффект такой.

$ 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.
2
ответ дан 28 July 2021 в 11:25

Другие вопросы по тегам:

Похожие вопросы: