
기본적으로 서버에서 SCP를 통해 주고받는 모든 파일을 하나하나 기록하고 싶습니다.
사용자가 Server-1에서 Server-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 소프트웨어 패키지를 사용하고 있을 것입니다. OpenSSH scp
유틸리티는 아무것도 기록하지 않습니다. 기본 SSH 세션에 대한 디버깅 출력을 지원하지만 발생하는 실제 파일 전송을 기록하지는 않습니다.
마찬가지로 OpenSSH 서버는 수행 중인 작업에 대한 세부 정보를 기록하도록 설정할 수 있으며, 사용자가 연결하고 실행했다는 사실을 기록하도록 설정할 수 있지만 scp
실제로 발생하는 파일 전송은 기록하지 않습니다.
이러한 사용자가 SFTP를 대신 사용하도록 할 수 없는 경우 사용할 수 있는 세 가지 접근 방식이 있습니다.
대체(즉, 상업용) SSH/SFTP/SCP 서버를 조사합니다. 일반적으로 로깅 파일 전송을 지원해야 합니다.
scp
서버의 유틸리티를 원하는 데이터를 기록하는 유틸리티로 교체하십시오 . OpenSSH는 오픈 소스입니다. Unix용 C 프로그래밍 방법을 아는 사람은 다음과 같이 할 수 있습니다.소스를 다운로드하세요그리고 수정하세요.scp
유틸리티를 원래 scp 프로그램을 시작하고 그 내용을 모니터링하는 "래퍼"로 바꾸십시오 . 다른 프로세스가 수행하는 작업을 모니터링할 수 있는 Unix용 디버깅 도구가 있습니다.
전송을 한 번 기록해야 했고 scp
세 번째 접근 방식을 사용했습니다. 나는 원본 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)