我正在使用 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
- 将其保存在适当的地方,例如
/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]
更安全的替代方案
您甚至可以在没有命令=“...”-调用的情况下执行此操作,但使用在 ~/.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
也适合你。