如何获取 SSH 文件传输的通知?

如何获取 SSH 文件传输的通知?

我想知道是否有一种方法或程序可以监视 SSH 文件传输并在文件(传入)传输时发送电子邮件?

(另一种选择是,至少在有人通过 SSH 登录时收到通知,但如果电子邮件中包含已传输文件的信息,那就理想了)

此外,如何检查参与 ssh 文件传输的活跃用户?

我知道这是一个 OSX 问题,但我认为它更适合 SuperUser 网站。如果我错了,请投票移动 :)

答案1

为了检查哪些用户现在有活动的 SFTP 会话,您可以查找该sftp-server进程。请注意,进程的存在并不一定意味着他们当前正在传输文件。

$ ps uax | grep '[s]ftp-server'
1000     15115  0.0  0.0  12532   728 ?        Ss   14:38   0:00 /usr/lib/openssh/sftp-server

(如果您感到疑惑,模式中的方括号被用作一种“技巧”,将 grep 命令本身从输出中隐藏起来。)

Shell 脚本 (bash)

#!/usr/bin/env bash

pids=$(pgrep -x sftp-server)
users=()

for pid in "${pids[@]}"; do
    users+=("$(ps --no-headers -o user 15115)")
done

echo "Users with active SFTP sessions: ${users[*]}"

如果要每行输出一个用户,请将最后一行替换为以下内容:

echo "Users with active SFTP sessions:"
echo
for user in "${user[@]}"; do
    echo "$user"
done

或者,您可以使用/proc文件系统,而不是依赖于pgrep。这个答案没有详细说明。

答案2

这是通过电子邮件发送自定义消息的示例脚本。

echo "User $USER just logged in * $(date '+%d-%m-%Y %T') |
    sendmail -q -u "SSH Login" -f 'Originator <[email protected]>' \
             -t 'Your Name <[email protected]>' -s smtp.server.com &

要发送电子邮件,您需要sendmail 安装该软件包。请阅读手册页sendmail以了解更多详细信息。

您可以在所需用户的文件中放置这样的脚本,.bash_login这样每当该用户使用终端登录并且登录成功时,您都会收到电子邮件通知。(SSH 使用终端登录。)

相关内容