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)
のマニュアルページでは、tcp_wrappersのtwist
コマンドについて説明しています。
_
twist Shell_command
_
hosts_access(5)
マニュアルページで説明されている%展開を実行した後、現在のプロセスを指定されたShellコマンドのインスタンスに置き換えます。 Stdin、stdout、およびstderrはクライアントプロセスに接続されています。このオプションは、ルールの最後に表示する必要があります。
問題は、SSHが単なるテキストプロトコルではなく、いくつかのプロトコルメッセージを予期し、それらを受信しない場合、失敗することです。デバッグモード(_ssh -v
_)でssh
を実行すると、次のように表示されます。
_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プロトコルに挿入する簡単な方法はありません。おそらく、この動作を受け入れる必要があります。