我正在寻找有关 Linux 服务器 (CentOS) 指南或脚本的帮助,可用于在检测到新的 SFTP 连接时向服务器帐户发送电子邮件。例如,提供连接名称和请求 IP 地址以及连接身份验证类型(如果可能)(如 SSH 密钥或密码等)。
我几乎没有使用 Bash 脚本的经验,但是我已经成功地做到了这一点,它可以检测 SSH 连接;但是我找不到去哪里扩展它以通知SFTP 连接到服务器的电子邮件地址,
非常感谢您对此的任何帮助。
我确实意识到这是一个非常糟糕的问题,我很抱歉,但是搜索引擎结果给了我很多错误的结果,例如“我如何 SFTP 到我的服务器?!” 等等明显不合适的。
干杯
更新 1
因此/var/logs/secure
收集 SFTP 连接信息。我希望能够以某种方式获取该信息并将其丢弃在基本的电子邮件中。
我当前工作的 SSH 检测器在以下位置执行此操作.bashrc
:
echo -e 'ALERT - SSH access detected:' `date` `ls -l \`tty\` | awk '{print $3}'` '\n\nConnection Details: ' `w -h` '\n\nList of WHO: ' `who --login` | mail -s "Alert: Server Access Email Subject" [email protected]
这被称为,由 CSF (ConfigServerFirewall) 触发
我想以某种方式将上述两者结合起来,以便在将信息行添加到/var/log/secure
诸如以下内容时:
Subsystem sftp /usr/libexec/openssh/sftp-server -l INFO
然后它也将能够检测到行开始:
接受的公钥......
然后可以将该行以电子邮件的形式发送到电子邮件地址....
更新 2:
我可能需要编写自己的 Bash shim ....
更新 3:
感谢 Piotr,我的 shim 代码现在是:
#!/bin/bash
# Create a temporary log file
LOGFILE=$(/bin/mktemp /tmp/sftplog.XXXXXX)
# Redirect stderr to LOGFILE
exec 2>"$LOGFILE"
# Run the SFTP with logging to stderr
/usr/libexec/openssh/sftp-server -e -u 022 -l VERBOSE
# Use some sendmail substitute to send an e-mail
/usr/sbin/sendmail -i root@localhost <<EOF
From: [email protected]
To: [email protected]
Subject: SFTP connection for user $(LOGNAME)
Hello,
User $(LOGNAME) just connected to the SFTP server from $(SSH_CONNECTION).
Connection log:
$(<"$LOGFILE")
EOF
# echo -e "Hello,\nUser $(LOGNAME) just connected to the SFTP server from $(SSH_CONNECTION).\n\nConnection log:\n$(<"$LOGFILE")" | mail -s "SFTP connection for user $(LOGNAME)" [email protected]
# Delete the log
rm -f "$LOGFILE"
我已经从命令行运行了 sendmail 指令,这可以正常工作,但是新的 SFTP 连接在读取数据包时会导致 EOF。
更新 4
将脚本简化为:
#!/bin/bash
# Create a temporary log file
# Run the SFTP with logging to stderr
/usr/libexec/openssh/sftp-server -e -u 022 -l INFO
exec >/dev/null
连接时读取数据包问题时仍返回EOF 。
更新 5:
将文件权限设置为与原始子系统文件 ( /usr/libexec/openssh/sftp-server
) 的权限相同可以解决问题并且脚本可以正确运行。