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

时间:2016-10-20 03:54:56

标签: sftp ssh2-sftp

SFTP客户端最初发送SSH_FXP_INIT(版本2)。 SFTP服务器没有发送SSH_FXP_VERSION的原因吗?而是发送SSH_FXP_STATUS信息

  

SFTP服务器仅支持版本3

如何进行版本协商?
或者我遗漏了一些需要做的事情?

如果有人喜欢了解问题并帮助我,我可以更详细地阐述情况。请帮忙!

1 个答案:

答案 0 :(得分:2)

阅读SFTP specification

  

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

您的客户端仅支持SFTP版本2(可能更旧)。您的服务器支持SFTP版本3(可能更新)。谈判失败了。

未真正使用3以下的SFTP协议版本。因此,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中添加。

  

我的其他测试机器(oracle MFT)只支持版本3,不发送SSH_FXP_VERSION数据包,但是带有信息且没有通信的SSH_FXP_STATUS

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