Используя твист в hosts.allow

В конце моего 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

1 ответ

Решение

Страница руководства для 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. Вы, вероятно, должны принять это поведение.

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