ユーザーが接続するたびに(トンネリングの場合でも)SSHサーバーでコマンドを実行します。

ユーザーが接続するたびに(トンネリングの場合でも)SSHサーバーでコマンドを実行します。

複数のユーザーが使用するOpenBSD SSHジャンプホストの管理者として、私はすべてのユーザーがSSHを介して接続したときにトンネリングのためのものであっても特定のコマンドを実行したいと思います。

可能ですか?

ForceCommand試してみましたが、/etc/sshrcこれはユーザーがインタラクティブセッションにいるときにのみ機能しているようですが、そうでなければ機能しないようです。

OpenBSDを実行しているので、残念ながらPAMベースのすべては機能しません。この答えはUnixとLinuxで動作します。

スクリプトは、誰がログインしたのか、どこでログインしたのかを知るためにsendmail使用されwhoami、実行されます。$SSH_CONNECTION

#!/bin/sh

[email protected]

sendmail -F alerts -f $EMAIL root << EOF
Subject: New Login For $1
Message-ID: <$(date +%s)@$(hostname)>
X-Mailer: OpenSMTPD
Content-Type: text/plain

There has been a new login for $1 on $SSH_CONNECTION
EOF

ベストアンサー1

特定の行が一致した場合は、監視して/var/log/authlogメッセージawkを送信できます。

tail -f /var/log/authlog | awk '/Accepted pubkey/ { system("mail -s " $0 " [email protected] << EOF\nEOF") }'

もちろん、/Accepted pubkey/状況に応じて異なるパターンに置き換えることもできます。 MUAを読みやすくするために、ログ行のタイトルを含む空のメールを送信することを選択しましたが、あなたは次のことを好むかもしれません。

system("mail -s New\\ Login [email protected] << EOF\n" $0 "\nEOF")

おすすめ記事