リモートサーバーで SCP ログを取得する方法

リモートサーバーで SCP ログを取得する方法

基本的に、サーバー上の 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 つの方法があります。

  1. 代替の(つまり、商用の)SSH/SFTP/SCP サーバーを調査します。通常、これらのサーバーはファイル転送のログ記録をサポートしているはずです。

  2. scpサーバー上のユーティリティを、必要なデータを記録するものに置き換えます。OpenSSHはオープンソースです。Unix用のC言語のプログラミング方法を知っている人なら、ソースをダウンロードそしてそれを変更します。

  3. 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)

関連情報