通过 SSH 密钥登录时如何获取登录用户的电子邮件?

通过 SSH 密钥登录时如何获取登录用户的电子邮件?

我正在使用 bash shell 和 Ubuntu 18.04。我使用相当标准的 RSA 公钥-私钥设置通过 SSH 进入服务器,我将公钥放在服务器的 .ssh/authorized_keys 文件中,条目如下所示

ssh-rsa AAAAB…KKRaniLSv8mHQ== [email protected]

登录后是否可以编写一个脚本或命令来告诉我登录帐户的电子邮件?在上面的情况下,我希望脚本输出[电子邮件受保护]

编辑:我没有相关登录用户的 sudo 权限。

答案1

我认为您无法捕获公钥条目末尾的字符串,authorized_keys但是您可以这样做,以便使用特定的 ssh 密钥登录会触发自定义脚本。

command="..."一个非常简单的概念证明是在键之前添加:

command="echo [email protected] ; exec /bin/bash" ssh-rsa AAAAB…KKRaniLSv8mHQ== [email protected]

上面的内容不是很稳健,原因有两个:

  • 它阻止用户执行自己的命令:不会按预期工作ssh [email protected] some-command
  • 用户 shell 可能不是/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]

更安全的替代方案

您甚至可以在没有命令=“...”-调用的情况下执行此操作,但使用在 ~/.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

我的想法是

  • 启用 linux 审计,给你一个/var/log/audit/audit.log文件
    • 您可能必须添加规则/etc/audit/audit.rules才能捕获事件,否则......
    • tail -f /var/log/audit/audit.log查看发生时捕获的 ssh 登录事件。
  • 因此,登录后,无论将来何时,都可以通过audit.log回头查找这些事件,它将包含用户的userid,该用户id被映射到/etc/passwd
    • 原始数据audit.log将具有纪元时间的时间戳格式,因此您必须将其转换为人类 mm/dd/yy hh:mm:ss 格式;如果您需要时间戳,可以使用多种方法来执行此操作。
  • 然后从相应的用户名行中取出名字和姓氏/etc/passwd并制作[电子邮件受保护]从中。

也许/var/log/secure也适合你。

相关内容