SSHキーでログインしたときにログインしたユーザーのEメールをどのように取得しますか?

SSHキーでログインしたときにログインしたユーザーのEメールをどのように取得しますか?

私は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
  1. 適切な場所に保管してください。/home/username/.print_login_email.sh
  2. chmodを使用して実行可能にします。 chmod u+x /home/username/.print_login_email.sh
  3. 項目に以下を追加します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.logLinux監査を有効にしてファイルを提供します。
    • /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それはあなたにも効果があるでしょう。

関連情報