我正在寻求有关 Linux 服务器 (CentOS) 指南或脚本的帮助,当检测到新的 SFTP 连接时,这些指南或脚本可用于向服务器帐户发送电子邮件。例如,提供连接名称和请求 IP 地址以及连接身份验证类型(如果可能)(例如 SSH 密钥或密码等)。
我几乎没有使用 Bash 脚本的经验,但是我已经成功地做到了这一点,它可以检测 SSH 连接;但是我不知道在哪里扩展它以将SFTP 连接的电子邮件地址通知给服务器,
非常感谢您对此的任何帮助。
我确实意识到这是一个非常糟糕的问题,我道歉,但搜索引擎结果给了我很多错误的结果,例如“我如何 SFTP 到我的服务器?!” 等明显不合适的。
干杯
所以/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@address.com
Run Code Online (Sandbox Code Playgroud)
这被称为,由 CSF (ConfigServerFirewall) 触发
我想以某种方式将上述两者结合起来,以便在将信息行添加到/var/log/secure诸如以下内容时:
Subsystem sftp /usr/libexec/openssh/sftp-server -l INFO
Run Code Online (Sandbox Code Playgroud)
然后它也将能够检测到行开始:
接受公钥....
然后可以将这一行发送到电子邮件地址中......
我可能需要编写自己的 Bash 垫片 ....
感谢 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@localaddress.co.uk
To: email@localaddress.co.uk
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@localaddress.co.uk
# Delete the log
rm -f "$LOGFILE"
Run Code Online (Sandbox Code Playgroud)
我已经从命令行运行了 sendmail 指令,这工作正常,但是新的 SFTP 连接在读取数据包时导致EOF。
将脚本简化为:
#!/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
Run Code Online (Sandbox Code Playgroud)
连接时读取数据包问题仍然返回EOF。
将文件权限设置为与原始子系统文件 ( /usr/libexec/openssh/sftp-server)的权限相同可解决问题并且脚本正确运行。
ssh子系统的好处在于您可以用另一个实现替换默认实现(如 Martin 所说的internal-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
Run Code Online (Sandbox Code Playgroud)
然后你只需要用你的脚本替换默认的 SFTP 服务器/etc/ssh/sshd_config:
Subsystem sftp /usr/local/bin/sftp-logger
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
935 次 |
| 最近记录: |