SFTP version mismatch-SFTP server only support versions 3

o cliente SFTP envia inicialmente o SSH_FXP_INIT (com a versão 2). Há alguma razão pela qual o servidor SFTP não envia SSH_FXP_VERSION? Em vez disso, está a enviar SSH_FXP_STATUS com info

o servidor SFTP só suporta as versões 3

Como então a negociação de versões é possível?
Ou falta - me algo que precisa de ser feito?

Posso explicar melhor a situação, se alguém quiser compreender o problema e ajudar-me. Por favor, ajudem-me!

Author: Martin Prikryl, 2016-10-20

1 answers

Leia a especificação de SFTP:

Quando o protocolo de transferência de ficheiros começa, o cliente envia primeiro um Ssh_fxp_init (incluindo o seu número de versão) pacote para o servidor. o servidor responde com um pacote SSH_FXP_VERSION, fornecendo o menor do seu próprio e o número de versão do cliente. ambas as partes deve, a partir de então, aderir a essa versão específica do protocolo.

O seu cliente suporta a versão 2 do SFTP (e talvez mais velho) apenas. O seu servidor suporta a versão 3 do SFTP (e talvez mais recente). Então a negociação falha.

As versões de protocolo SFTP abaixo de 3 não foram realmente utilizadas. Então é bastante comum que as implementações SFTP não suportam essas versões. A versão 3 é de longe a versão mais utilizada (suportada pelo OpenSSH, que não suporta versões mais recentes).


O meu código de cliente envia sempre a versão 2... Ao enviar isto para o servidor SFTP, envia a versão 3

É é obrigatório para o servidor SFTP responder ao SSH_FXP_VERSION com a versão inferior ou qualquer versão predefinida se o cliente enviar o ssh_fxp_init

Acho que o servidor viola o padrão ao responder a uma versão mais alta do que o cliente pediu. Mas sei que o servidor de SFTP do OpenSSH faz isso. Ignora, o que o cliente pede e responde sempre com 3. Presumo que a tua máquina de testes use o OpenSSH.

Há realmente uma diferença muito pequena entre 3 e 2 (e 1 e 0):

  • As mensagens SSH_FXP_READLINK e SSH_FXP_SYMLINK foram adicionadas.

  • As mensagens SSH_FXP_EXTENDED e SSH_FXP_EXTENDED_REPLY foram valer.

  • A mensagem SSH_FXP_STATUS foi alterada para incluir os campos' mensagem de erro 'e'tag da linguagem'.

Então é muito provável que o seu cliente SFTP 2 possa falar com o servidor SFTP 3, Se o cliente não sufocar no campo adicional no {[[0]} resposta.

Na verdade, o servidor SFTP do OpenSSH, ao responder com 3, comporta-se como 2, se o cliente pediu 2 (Isso é imho mais uma violação da especificação). Ele especificamente não adiciona o campo error message às respostas SSH_FXP_STATUS, que foi adicionado apenas em 3.

A minha outra máquina de testes (oracle MFT ) que só suporta a versão 3, não envia o pacote SSH_FXP_VERSION, mas o SSH_FXP_STATUS com o info e a comunicação não acontece

Este é o imho the comportamento correcto, embora infeliz para si.
 2
Author: Martin Prikryl, 2016-10-21 06:44:55