更新 1

更新 1

我正在寻找有关 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)可解决问题并且脚本可正确运行。

答案1

ssh 的优点子系统你可以用以下方法替换默认实现(内部-sftp正如马丁所说)使用另一种实现,例如包装脚本/usr/lib/openssh/sftp-server

一个小例子:创建一个文件/usr/local/bin/sftp-logger,内容如下:

#!/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/lib/openssh/sftp-server -e -l INFO

# In case of chatty sendmail
exec >/dev/null

# Use some sendmail substitute to send an e-mail
/usr/sbin/sendmail -i root@localhost <<EOF
From: sshd@localhost
To: root@localhost
Subject: SFTP connection for user $LOGNAME

Hello,
User $LOGNAME just connected to the SFTP server from $SSH_CONNECTION.

Connection log:
$(<$LOGFILE)
EOF

# Delete the log
rm -f $LOGFILE

然后您只需用您的脚本替换默认的 SFTP 服务器/etc/ssh/sshd_config

Subsystem sftp /usr/local/bin/sftp-logger

相关内容