2016-10-31 10 views
0

원격 서버에서 일부 작업을 수행하기 위해 FTP와 SFTP 사용을 번갈아 사용하는 프로그램이 있습니다.JSch SFTP 자세한 로깅

FTP 부분의 경우 Apache Commons FTP 클라이언트를 사용하는 반면 SFTP의 경우 JSch 라이브러리를 사용하고 있습니다.

아파치 commons는 서버의 응답과 함께 클라이언트가 서버에 발행 한 모든 명령을 완전히 자세히 인쇄합니다.

내 응용 프로그램이 두 경우에 어떻게 기록되는지 일관성있게 유지하려면 JSch와 비슷한 것을하고 싶습니다.

JSch 라이브러리의 Logger 인터페이스를 성공적으로 구현하려고 시도했지만 서버에 발행 된 명령에 대한 자세한 표현과 응답을 제공 할 수 없다는 것이 밝혀졌습니다.

비슷한 솔루션을 찾으려고했지만 SFH 세션이 아닌 SSH 세션을 찾고있는 것과 유사한 작업을 수행합니다.

PrintStream을 만든 다음 채널의 OutputStream으로 설정하려고 시도했지만 작동하지 않았습니다.

채널의 InputStream과 OutputStreams를 캡처 할 스레드가 있지만 여기까지 제대로 작동하지 못하는 몇 가지 제안을 구현해 보았습니다.

제 궁금한 점은 누구나 그렇게 할 수 있었습니까? JSch 라이브러리를 사용하면서 기본 FTP 대화 상자를 인쇄 하시겠습니까?

답변

1

JSch 라이브러리는 SFTP 요청 및 응답을 기록하지 않습니다.

  • ChannelSftp는 패킷을 읽기 위해 스트림 자체를 소비 : 때문에 하나 도움이되지 않습니다 스트림을 소비

    . 개입하면 구현을 중단하게됩니다.

  • SFTP (FTP와 반대)는 바이너리 프로토콜입니다. 따라서 스트림을 읽지 만 이진 데이터를 얻습니다. 이진 데이터는 디코딩해야합니다. 기본적으로 요청/응답 메시지의 모든 단일 유형마다 모든 필드를 명시 적으로 기록해야하기 때문에 FTP와 비교하여 SFTP 프로토콜 로깅을 구현하는 것은 상당히 어렵습니다.

또한 SFTP 프로토콜은 FTP보다 낮은 수준입니다. FTP STOR 또는 RETR과 같은 "훌륭한"고급 명령은 없습니다. 각 전송에 대해 수천 개의 다른 요청이 표시 될 수 있습니다. 아마 아니, 당신이 뭘하고있어.

+0

답장을 보내 주셔서 감사합니다. 나는 실제로 당신이 언급 한 것처럼 그 기능을 깨뜨리고 있다는 것을 구현하려고 시도했다. 이에 기초하여 모든 작업에서 진행 상황을 기록하는 또 다른 방법을 찾았습니다. – ArisKortex