如何调试/跟踪传入的 SFTP 会话?

如何调试/跟踪传入的 SFTP 会话?

我的应用程序 (JetBrains CLion) 通过连接到我的远程服务器SFTP并将文件放置到那里。不幸的是,文件看起来充满了零字节。我想追踪,到底出了什么问题。

我可以在我的服务器上运行一些东西来SFTP实时监控会话并查看发生了什么。我是root服务器上的。服务器运行 Ubuntu 16。

PS 如果我运行SFTP自己和put文件,它们就可以了。


在客户端,我在日志中没有看到任何问题:只是一些带有 的会话put以及stat具有输出的类似命令Ok。所以也想调试服务器端。

答案1

OpenSSH 服务器使用一个名为sftp服务器用于 SFTP 会话。sftp-server有几个选项来控制日志记录:

-f 日志设施
指定从 sftp 服务器记录消息时使用的设施代码。可能的值为:DAEMON、USER、AUTH、LOCAL0、LOCAL1、LOCAL2、LOCAL3、LOCAL4、LOCAL5、LOCAL6、LOCAL7。默认为 AUTH。

-l 日志级别
指定 sftp 服务器将记录哪些消息。可能的值为:QUIET、FATAL、ERROR、INFO、VERBOSE、DEBUG、DEBUG1、DEBUG2 和 DEBUG3。 INFO 和 VERBOSE 记录 sftp 服务器代表客户端执行的事务。 DEBUG 和 DEBUG1 是等效的。 DEBUG2 和 DEBUG3 各自指定更高级别的调试输出。默认为错误。

要应用这些,您需要打开系统的sshd_配置文件并找到SubsystemSFTP 行。它看起来像这两行之一或另一行:

Subsystem   sftp    /path/to/sftp-server
Subsystem   sftp    internal-sftp

无论您有什么,都将日志记录参数附加到末尾:

Subsystem   sftp    /path/to/sftp-server -l DEBUG3

编辑后sshd_config,必须重新启动sshd才能使更改生效。

完成所有这些后,SFTP 会话应该开始将调试信息记录到系统日志中。您可以使用调试消息来跟踪客户端发送的命令以及 SFTP 服务器执行的文件系统操作。

sftp-server程序是用C编写的,你可以找到源代码这里。如果您能理解它,您可能会发现源代码有助于理解日志消息。

相关内容