我想知道是否有一种方法或程序可以监视 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 使用终端登录。)