在我的最后,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)
解释了twist
tcp_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 协议。您可能需要接受这种行为。