用於檢測(並通過電子郵件通知)與伺服器的新 SFTP 連接的 Linux Bash 腳本
我正在尋找有關 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@address.com
這被稱為,由 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@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"
我已經從命令行執行了 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
) 的權限相同可以解決問題並且腳本可以正確執行。
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