新しいSFTP接続が検出されたときにサーバーアカウントに電子メールを送信するために使用できるLinuxサーバー(CentOS)ガイドまたはスクリプトのヘルプを探しています。たとえば、接続名と要求元のIPアドレス、および接続認証タイプ(可能な場合)(SSHキーやパスワードなど)を指定します。
私はBashスクリプトの経験がほとんどありませんが、SSH接続を検出するこれを正確に行うことに成功しました。ただし、これを拡張して電子メールアドレスSFTP Connectionsをサーバーに通知する場所を見つけることができません。
これについて助けてくれてありがとう。
これはかなりひどい質問であり、お詫び申し上げますが、検索エンジンの結果には、「サーバーに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 protected]
これは呼び出され、CSF(ConfigServerFirewall)によってトリガーされます
上記の2つをどうにか組み合わせて、次のように/var/log/secure
に情報行が追加されるようにします。
Subsystem sftp /usr/libexec/openssh/sftp-server -l INFO
次に、ラインの開始を検出することもできます。
...の公開鍵を受け入れました。
この行は、電子メールアドレスに送信されます。
自分で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 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 OF while packetreadが発生します。
スクリプトを次のように減らします。
#!/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の問題が引き続き返されます。
ファイルのアクセス許可を元のサブシステムファイル(/usr/libexec/openssh/sftp-server
)のアクセス許可と同じに設定すると、問題が解決し、スクリプトが正しく実行されます。
Ssh subsystemsの良い点は、デフォルトの実装(internal-sftp Martinのコメント)を別の実装に置き換えることができることです。 /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