私はbashシェルとUbuntu 18.04を使用しています。かなり標準的なRSA公開 - 秘密鍵設定を使用してサーバーにSSHで接続し、公開鍵をサーバーの.ssh / authorized_keysファイルに入れました。
ssh-rsa AAAAB…KKRaniLSv8mHQ== [email protected]
ログイン後にログインアカウントの電子メールを通知するスクリプトまたはコマンドを作成できますか?上記の場合、スクリプトを出力したいと思います。[Eメール保護]。
編集する:関連ログインユーザーに対するsudo権限がありません。
答え1
公開鍵エントリの末尾の文字列をキャプチャすることはできないようですが、authorized_keys
特定のSSHキーでログインすると、カスタムスクリプトがトリガーされるようにすることができます。
command="..."
非常に単純な概念の証明は、キーの前に以下を追加することです。
command="echo [email protected] ; exec /bin/bash" ssh-rsa AAAAB…KKRaniLSv8mHQ== [email protected]
上記は、次の2つの理由で非常に強力ではありません。
- ユーザーが自分のコマンドを実行するのを防ぎます。期待どおりに動作しません。
ssh [email protected] some-command
- ユーザーシェルは
/bin/bash
。
上記の問題を解決するには、コマンドとして使用するスクリプトを作成します。
#!/bin/bash
# Echo the email address
echo $1
if [[ -z $SSH_ORIGINAL_COMMAND ]] ; then
# If the user is trying to execute a regular shell then find which shell
exec $(getent passwd $(whoami) | awk -F: '{print $NF}')
else:
# If the user is trying to execute another command then run that command
exec $SSH_ORIGINAL_COMMAND
fi
- 適切な場所に保管してください。
/home/username/.print_login_email.sh
- chmodを使用して実行可能にします。
chmod u+x /home/username/.print_login_email.sh
- 項目に以下を追加します
authorized_keys
。
command="/home/username/.print_login_email.sh [email protected]" ssh-rsa AAAAB…KKRaniLSv8mHQ== [email protected]
より安全な代替
command="..." 呼び出しなしでこれを行うことができますが、 ~/.profile または ~/.zshenv でチェックインされた環境変数を使用できます。
~/.ssh/authorized_keys
environment="SSH_USER=PUBKEYFROMJOEDOE1" ssh-rsa AAAAAB3Ny...
environment="SSH_USER=PUBKEYFROMJOEDOE2" ssh-rsa AAAAAB3Nz...
~/.zshenv
|~/.profile
if [ -n "$SSH_USER" ]; then
logger -ip auth.notice -t sshd "Accepted publickey for $SSH_USER"
#This Part if ZSH-Specific
export HISTFILE="$HOME/.zsh_$SSH_USER_history"
if [ "$SSH_USER" != "DONTSENDMAILUSER" ]; then
echo "User $SSH_USER has logged in on Hostname" | NULLMAILER_NAME="HOSTNAME LOGIN" mail -s "Notice from SSH-Login" [email protected]
fi
fi
私は通常/etc/zsh/zshenv - ~crpbにスクリプトを持っています。
答え2
私の意見は
/var/log/audit/audit.log
Linux監査を有効にしてファイルを提供します。/etc/audit/audit.rules
イベントをキャプチャするには、ルールを追加する必要があります。それ以外の場合...tail -f /var/log/audit/audit.log
キャプチャされたSSHログインイベントが発生したことを確認してください。
- したがって、ログイン後、後でいつでもマップされたユーザーのユーザーIDを含むaudit.logを介してこれらのイベントを再表示できます。
/etc/passwd
- 生データ
audit.log
にはepoch-timeタイムスタンプ形式があるため、これを人間のmm / dd / yy hh:mm:ss形式に変換する必要があります。これを行う方法はいくつかあります。
- 生データ
- その後、そのユーザー名行から名前と姓を取得し
/etc/passwd
、[Eメール保護]から。
おそらく/var/log/secure
それはあなたにも効果があるでしょう。