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출력에 접두사 또는 적절한 접두사를 추가할지 여부를 결정하는 등의 추가 처리를 수행합니다.

관련 정보