【问题标题】:JSch SFTP verbose loggingJSch SFTP 详细日志记录
【发布时间】:2017-03-13 22:49:44
【问题描述】:

我有一个程序可以在 FTP 和 SFTP 之间交替使用,以便在远程服务器上执行一些操作。

对于 FTP 部分,我使用的是 Apache Commons FTP 客户端,而对于 SFTP,我使用的是 JSch 库。

Apache commons,可以并且将打印出客户端向服务器发出的所有命令,以及服务器的响应。

我想对 JSch 做一些类似的事情,以使我的应用程序在两种情况下的日志记录方式保持一致。

我已尝试成功实现 JSch 库的 Logger 接口,但事实证明它无法为我提供向服务器发出的命令及其响应的详细表示。

我曾尝试寻找类似的解决方案,但它们都围绕着做一些类似于我正在寻找的 SSH 会话而不是 SFTP 会话的事情。

我曾尝试创建一个 PrintStream,然后将其设置为频道的 OutputStream,但这没有奏效。

我还尝试实施我在这里找到的一些建议,这些建议围绕着一个线程来捕获通道的 InputStream 和 OutputStreams,但到目前为止我还没有让某些东西正常工作。

我的问题是,有没有人设法做这样的事情 - 例如。打印出底层 FTP 对话框 - 在使用 JSch 库时?

【问题讨论】:

    标签: java ftp sftp jsch


    【解决方案1】:

    JSch 库不记录 SFTP 请求和响应。

    消费流也无济于事,因为:

    • ChannelSftp 使用流本身来读取数据包。如果您进行干预,您可能会破坏其实施。
    • SFTP(与 FTP 相反)是二进制协议。因此,即使您设法读取流,您也会获得需要解码的二进制数据。从本质上讲,实现 SFTP 协议的日志记录非常困难(与 FTP 相比),因为您基本上需要显式记录每种类型的请求/响应消息的每个字段。

    另请注意,SFTP 协议比 FTP 更底层。没有像 FTP STORRETR 这样的“好”高级命令。您可能会看到针对每次传输的数千个不同请求。可能不是,你在追求什么。

    【讨论】:

    • 感谢您的回复。我实际上已经尝试实现类似的东西,正如你提到的那样,我破坏了它的功能。基于此,我找到了另一种方法来记录我所做的每项操作的进度。
    猜你喜欢
    • 2020-08-18
    • 1970-01-01
    • 2022-11-15
    • 2012-10-08
    • 2013-03-12
    • 1970-01-01
    • 2020-08-02
    • 2018-10-28
    • 1970-01-01
    相关资源
    最近更新 更多