OpenSSH LogLevelオプションはどのように機能しますか?

OpenSSH LogLevelオプションはどのように機能しますか?

次のネットワークトポロジがあります。

workstation <-> network_device <-> authentication_server

network_deviceworkstationSSH経由でログインするときは、TACACS +を使用してログイン権限があること、アクセス権が何であるかを確認してくださいnetwork_device。で実行すると、ネットワークデバイスバナーは表示されませんが、次のプロンプトが表示されます。authentication_servernetwork_devicessh -o LogLevel=quiet network_deviceworkstation

$ ssh -o LogLevel=quiet network_device
TACACS authentication!

Password: 

$ 

このTACACS authentication!文字列はで設定されますauthentication_server。を実行すると、ssh -vvv -o LogLevel=quiet network_deviceこのバナーとパスワードのプロンプトが異なるようです。メッセージID。バナー:

debug3: receive packet: type 53                    
debug3: input_userauth_banner                      

*************************************************  
*    Access limited to Authorized Users only    *  
*************************************************  

パスワードヒント:

debug3: receive packet: type 60                        
debug2: input_userauth_info_req                        
debug2: input_userauth_info_req: num_prompts 1         
TACACS authentication!                           

Password:    

OpenSSHクライアントLogLevelオプションは、LogLevel値に基づいて特定のメッセージIDをフィルタリングすることによって機能しますか?マニュアルページには、LogLevel表示する内容を決定する方法が正確に記載されていません。

 LogLevel
         Gives the verbosity level that is used when logging messages from ssh(1).  The possible values are: QUIET, FATAL, ERROR, INFO, VERBOSE, DEBUG, DEBUG1, DEBUG2, and DEBUG3.  The default is
         INFO.  DEBUG and DEBUG1 are equivalent.  DEBUG2 and DEBUG3 each specify higher levels of verbose output.

答え1

あなたが知りたいほとんどの内容はlog.cOpenSSHソースコードにあります。という列挙変数がありますlog_level。 (列挙とは内部的には数値のように機能しますが、各レベルはわかりやすい名前に関連付けられていることを意味します。)このlog_level変数はグローバルに設定され、興味のないログを隠すマスクとして機能します。

その後、何かが記録されるたびに、そのメッセージも重要度レベルに関連付けられ、メッセージ+重要度にはという関数が提供されますdo_log

関数内でdo_log次のチェックを見ることができます。

if (!force && level > log_level)
    return;

つまり、メッセージが設定されたログレベルよりも重要ではない場合、そのメッセージはログ出力から削除されます。

このdo_log関数は、メッセージの重要度レベルを使用して、fatal出力にプレフィックスを追加するか適切なプレフィックスを追加するかを決定するなど、追加の処理を実行します。

関連情報