SFTP 版本不匹配 - SFTP 服务器仅支持版本 3

SFTP version mismatch - SFTP server only support versions 3

SFTP 客户端最初发送 SSH_FXP_INIT(版本 2)。 SFTP 服务器不发送 SSH_FXP_VERSION 有什么原因吗?相反,它发送 SSH_FXP_STATUS 和信息

SFTP server only support versions 3

那么版本协商怎么可能呢?
或者我遗漏了一些需要完成的事情?

如果有人愿意了解问题并帮助我,我可以详细说明情况。请帮忙!

阅读 SFTP specification:

When the file transfer protocol starts, the client first sends a SSH_FXP_INIT (including its version number) packet to the server. The server responds with a SSH_FXP_VERSION packet, supplying the lowest of its own and the client's version number. Both parties should from then on adhere to that particular version of the protocol.

您的客户端仅支持 SFTP 版本 2(可能更旧)。您的服务器支持 SFTP 版本 3(可能更新)。所以协商失败。

3 以下的 SFTP 协议版本并未真正使用。因此,SFTP 实现不支持这些版本是很常见的。版本 3 是迄今为止使用最广泛的版本(由 OpenSSH 支持,不支持较新的版本)。


my client code always sends version 2... On sending this to SFTP server, it sends back version 3

Is it mandatory for SFTP server to reply back SSH_FXP_VERSION with lower version or any default version if client sends SSH_FXP_INIT

我认为服务器响应高于客户端要求的版本违反了标准。但我知道 OpenSSH SFTP 服务器可以做到这一点。它忽略了客户端的请求并始终以 3 响应。所以我假设您的测试机器使用 OpenSSH。

实际上很小difference between 3 and 2(还有1和0):

  • The SSH_FXP_READLINK and SSH_FXP_SYMLINK messages were added.

  • The SSH_FXP_EXTENDED and SSH_FXP_EXTENDED_REPLY messages were added.

  • The SSH_FXP_STATUS message was changed to include fields 'error message' and 'language tag'.

所以您的 SFTP 2 客户端很可能可以与 SFTP 3 服务器通信,如果客户端不阻塞 SSH_FXP_STATUS 响应中的附加字段。

实际上,OpenSSH SFTP 服务器在响应 3 时表现得像 2,如果客户端要求 2(恕我直言,又一次违反规范)。它特别不会将 error message 字段添加到 SSH_FXP_STATUS 响应中,该字段仅在 3.

中添加

my other test machine ( oracle MFT ) which only supports version 3, does not send SSH_FXP_VERSION packet, but SSH_FXP_STATUS with info and not communication happens

恕我直言,这是正确的行为,但对你来说很不幸。