
基本的に、サーバー上の SCP 経由で送受信されるすべてのファイルをログに記録したいと考えています。
ユーザーがサーバー1からサーバー2にSCPを実行するとします。送信側でログを取得する方法を見つけました。しかし、受信側で転送されたものを取得するにはどうすればよいでしょうか?
SCP 経由で転送されたファイルの名前を含む受信側のログが必要です。
また、送信側でログを取得するために、最初にファイル名をログ ファイルに保存し、次に SCP を使用して転送する bash スクリプトを使用しています。これを行うためのより良い方法はありますか。
ご提案がありましたら、よろしくお願いいたします。
答え1
他の人も興味を持つかもしれない興味深い解決策を見つけました:
実際にこれを使用するとscp
、フラグを使用してサーバー上のバイナリも呼び出されます-f
。つまり、scp
次のようにサーバー側用の簡単なラッパーを記述できます。
まず、元のscp
の名前を変更します。
mv /usr/bin/scp /usr/bin/scp-org
次に、その名前で簡単なスクリプトを作成します。
sudo nano /usr/bin/scp
内容は次のとおりです:
#/bin/bash
scp-org $@ | tee >(grep -aEo "[CD][0-7]{4} [0-9]* .*$" --line-buffered >> /var/log/scp.log)
もちろん改良の余地はありますが、例としては十分です。これで、tail -f /var/log/scp.log
すべてのファイルがリアルタイムで転送されているのを確認できるようになりました。
答え2
scp
サーバー上のコマンドを、必要な操作を実行する修正バージョンに置き換えてみてください。scp
これは非常に単純なプログラムであり、これにログ記録コードを追加することは難しい作業ではありません。
答え3
おそらく OpenSSH ソフトウェア パッケージを使用しているのでしょう。OpenSSHscp
ユーティリティは何もログに記録しません。基盤となる SSH セッションのデバッグ出力をサポートしていますが、実際に行われているファイル転送はログに記録されません。
同様に、OpenSSH サーバーは、実行内容の詳細をログに記録するように設定できます。また、ユーザーが接続して実行したという事実をログに記録するように設定できますscp
が、実際に行われているファイル転送はログに記録されません。
これらのユーザーに SFTP を使用させることができない場合、次の 3 つの方法があります。
代替の(つまり、商用の)SSH/SFTP/SCP サーバーを調査します。通常、これらのサーバーはファイル転送のログ記録をサポートしているはずです。
scp
サーバー上のユーティリティを、必要なデータを記録するものに置き換えます。OpenSSHはオープンソースです。Unix用のC言語のプログラミング方法を知っている人なら、ソースをダウンロードそしてそれを変更します。scp
ユーティリティを、元の scp プログラムを起動してその動作を監視する「ラッパー」に置き換えます。別のプロセスの動作を監視できる Unix 用のデバッグ ツールがあります。
一度転送を記録する必要があったのでscp
、3番目の方法を使用しました。元のscpプログラムを起動するPerlスクリプトを書きました。ストレース. strace は、scp プロセスによって開かれたり閉じられたりするファイルの名前を出力します。Perl スクリプトは strace の出力を解析し、転送されているファイルを判別します。
答え4
サーバー上のバイナリのラッパーを作成することを提案するソリューションは、最近のクライアントscp
では機能しないと思います。scp
Since OpenSSH 8.8 (8.7 in Red Hat/Fedora builds), scp has use the SFTP protocol for transfers by default.
このような新しいクライアントの場合、scp
サーバー上で をラップするこのメカニズムは、クライアントがフラグscp
を使用して呼び出している場合にのみ機能します-O
(古いプロトコルを適用するため)。
このようなニーズには、rsync
の代わりにを使用するとscp
役立つかもしれません。rsync
ファイル アクセスをログに記録する機能があるようです。rsyncd.conf
マニュアル ページから:
log format
This parameter allows you to specify the format used for logging file transfers when transfer logging is enabled.
[..]
%f the filename (long form on sender; no trailing lq/rq)