【问题标题】:SFTP version mismatch - SFTP server only support versions 3SFTP 版本不匹配 - SFTP 服务器仅支持版本 3
【发布时间】:2017-03-01 21:47:36
【问题描述】:

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

SFTP 服务器仅支持版本 3

那么如何进行版本协商呢?
还是我错过了一些需要做的事情?

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

【问题讨论】:

    标签: sftp ssh2-sftp


    【解决方案1】:

    阅读SFTP specification

    文件传输协议启动时,客户端首先发送一个 SSH_FXP_INIT(包括它的版本号)包到服务器。 服务器以 SSH_FXP_VERSION 数据包响应,提供 自己的版本号和客户端的版本号中的最低者。 双方 从那时起,应遵守该特定版本的 协议。

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

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


    我的客户端代码总是发送版本 2...在将其发送到 SFTP 服务器时,它会发回版本 3

    如果客户端发送 SSH_FXP_INIT,SFTP 服务器是否必须以较低版本或任何默认版本回复 SSH_FXP_VERSION

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

    实际上有非常小的difference between 3 and 2(和 1 和 0):

    • 添加了 SSH_FXP_READLINK 和 SSH_FXP_SYMLINK 消息。

    • SSH_FXP_EXTENDED 和 SSH_FXP_EXTENDED_REPLY 消息是 已添加。

    • SSH_FXP_STATUS 消息已更改为包含“错误消息”和“语言标签”字段。

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

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

    我的另一台仅支持版本 3 的测试机 (oracle MFT) 不发送 SSH_FXP_VERSION 数据包,但 SSH_FXP_STATUS 带有信息且不发生通信

    这是正确的行为,虽然对你来说很不幸。

    【讨论】:

    • 感谢 Martin 的耐心聆听和详细解释。现在一切都说得通了。非常感谢。
    猜你喜欢
    • 1970-01-01
    • 2018-11-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-02-03
    • 1970-01-01
    • 2012-01-26
    • 1970-01-01
    相关资源
    最近更新 更多