AskOverflow.Dev

AskOverflow.Dev Logo AskOverflow.Dev Logo

AskOverflow.Dev Navigation

  • 主页
  • 系统&网络
  • Ubuntu
  • Unix
  • DBA
  • Computer
  • Coding
  • LangChain

Mobile menu

Close
  • 主页
  • 系统&网络
    • 最新
    • 热门
    • 标签
  • Ubuntu
    • 最新
    • 热门
    • 标签
  • Unix
    • 最新
    • 标签
  • DBA
    • 最新
    • 标签
  • Computer
    • 最新
    • 标签
  • Coding
    • 最新
    • 标签
主页 / server / 问题 / 997129
Accepted
Martin
Martin
Asked: 2019-12-31 07:24:57 +0800 CST2019-12-31 07:24:57 +0800 CST 2019-12-31 07:24:57 +0800 CST

用于检测(并通过电子邮件通知)与服务器的新 SFTP 连接的 Linux Bash 脚本

  • 772

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

linux
  • 1 1 个回答
  • 1391 Views

1 个回答

  • Voted
  1. Best Answer
    Piotr P. Karwasz
    2019-12-31T14:44:37+08:002019-12-31T14:44:37+08:00

    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
    

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

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

相关问题

  • Linux 主机到主机迁移

  • 如何在 Linux 机器上找到有关硬件的详细信息?

  • 如何在 Linux 下监控每个进程的网络 I/O 使用情况?

  • 在 RHEL4 上修改 CUPS 中的现有打印机设置

  • 为本地网络中的名称解析添加自定义 dns 条目

Sidebar

Stats

  • 问题 205573
  • 回答 270741
  • 最佳答案 135370
  • 用户 68524
  • 热门
  • 回答
  • Marko Smith

    新安装后 postgres 的默认超级用户用户名/密码是什么?

    • 5 个回答
  • Marko Smith

    SFTP 使用什么端口?

    • 6 个回答
  • Marko Smith

    命令行列出 Windows Active Directory 组中的用户?

    • 9 个回答
  • Marko Smith

    什么是 Pem 文件,它与其他 OpenSSL 生成的密钥文件格式有何不同?

    • 3 个回答
  • Marko Smith

    如何确定bash变量是否为空?

    • 15 个回答
  • Martin Hope
    Tom Feiner 如何按大小对 du -h 输出进行排序 2009-02-26 05:42:42 +0800 CST
  • Martin Hope
    Noah Goodrich 什么是 Pem 文件,它与其他 OpenSSL 生成的密钥文件格式有何不同? 2009-05-19 18:24:42 +0800 CST
  • Martin Hope
    Brent 如何确定bash变量是否为空? 2009-05-13 09:54:48 +0800 CST
  • Martin Hope
    cletus 您如何找到在 Windows 中打开文件的进程? 2009-05-01 16:47:16 +0800 CST

热门标签

linux nginx windows networking ubuntu domain-name-system amazon-web-services active-directory apache-2.4 ssh

Explore

  • 主页
  • 问题
    • 最新
    • 热门
  • 标签
  • 帮助

Footer

AskOverflow.Dev

关于我们

  • 关于我们
  • 联系我们

Legal Stuff

  • Privacy Policy

Language

  • Pt
  • Server
  • Unix

© 2023 AskOverflow.DEV All Rights Reserve