java - JSch SFTP 详细日志记录

标签 java ftp sftp jsch

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

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

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

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

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

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

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

我还尝试实现一些我在这里找到的建议,这些建议围绕着拥有一个捕获 channel 的输入流和输出流的线程,但到目前为止我还无法让某些东西正常工作。

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

最佳答案

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

使用流也不会帮助你,因为:

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

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

关于java - JSch SFTP 详细日志记录,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40349211/

相关文章:

javapoet - 如何实现 "extends"和 "implements"

Eclipse Indigo 远程系统资源管理器 : FTP Connection

android - 如何不允许任何人破解我的 .apk?

macos - Sublime SFTP 使用已知的工作配置超时

java - Jsch 文件上传已取消

bash - 如何在 SFTP 执行结束时执行 shell 脚本?

Java字符数组初始化器

java - 理解java平台独立性

java - 替换来自 Android WebView 的外部 javascript 文件中的函数调用

java - FTP客户端/服务器登录验证