在 hosts.allow 中使用 twist

在 hosts.allow 中使用 twist

在我的最后,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."

在客户端,我只看到“远程主机关闭连接”,而没有看到 echo 的输出。man -k twist

答案1

手册页hosts_options(5)解释了twisttcp_wrappers 中的命令:

twist shell_command

在执行手册页中描述的 % 扩展后,用指定 shell 命令的实例替换当前进程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 协议。您可能需要接受这种行为。

相关内容