В конце моего hosts.allow
Имею следующее:
ALL : ALL \
: spawn (echo "%d" | /usr/bin/mail -s "tcpf\: %d attempt from %h." root) & \
: severity auth.info \
: twist /bin/echo "You are not welcome to use %d from %h."`
Но это, похоже, просто помещает этот текст в мой журнал auth.log:
mail sshd[63546]: twist 12.34.56.789 to /bin/echo "You are not welcome to use sshd from 12.34.56.789."
На стороне клиента я вижу только «Соединение закрыто удаленным хостом» и не вижу вывода эха. Нет ничего в man -k twist
Страница руководства для hosts_options(5)
объясняет twist
команда в tcp_wrappers:
twist shell_command
Замените текущий процесс экземпляром указанной команды оболочки после выполнения% расширений, описанных в
hosts_access(5)
страница руководства. Stdin, stdout и stderr подключены к клиентскому процессу. Эта опция должна быть в конце правила.
Проблема в том, что SSH - это не просто текстовый протокол, но он ожидает некоторых протокольных сообщений, и если он их не получит, он потерпит неудачу. Если бы вы запустили ssh
в режиме отладки (ssh -v
), вы увидите следующее:
debug1: Local version string SSH-2.0-OpenSSH_7.5
debug1: ssh_exchange_identification: You are not welcome to use sshd from ::1.
ssh_exchange_identification: read: Connection reset by peer
Итак, сообщение действительно отправлено, но поскольку это был неправильный баннер SSH, оно не выполняется. Нет простого способа вставить ваши сообщения в протокол ssh. Вам, вероятно, придется принять такое поведение.