2016-10-20 2 views
1

Клиент SFTP первоначально отправляет SSH_FXP_INIT (с версией 2). Есть ли причина, по которой SFTP-сервер не отправляет SSH_FXP_VERSION? Вместо этого он посылает SSH_FXP_STATUS с информациейНесоответствие версии SFTP - поддержка только SFTP-серверов версий 3

SFTP-сервер поддерживает только версии 3

Как тогда версия переговоры возможно?
Или мне не хватает чего-то, что нужно сделать?

Я могу подробнее разобраться в ситуации, если кто-нибудь хочет понять проблему и помочь мне. Пожалуйста помоги!

ответ

2

прочитать SFTP specification:

При запуске протокола передачи файлов, клиент сначала отправляет SSH_FXP_INIT (включая номер версии) пакета на сервер. Сервер отвечает пакетом SSH_FXP_VERSION, предоставляя самый низкий номер и номер версии клиента. Обе стороны должны с этого момента придерживаться этой конкретной версии протокола .

Ваш клиент поддерживает только SFTP версии 2 (и может быть, старше). Ваш сервер поддерживает SFTP-версию 3 (и, возможно, более новую). Поэтому переговоры терпят неудачу.

Варианты протокола SFTP ниже 3 на самом деле не использовались. Поэтому довольно распространено, что реализации SFTP не поддерживают эти версии. Версия 3 на сегодняшний день является наиболее широко используемой версией (поддерживается OpenSSH, которая не поддерживает более новые версии).


мой код клиент всегда посылает версию 2 ... При отправке этого на сервер SFTP, он отправляет обратно версию 3

Является ли обязательным для сервера SFTP, чтобы ответить назад SSH_FXP_VERSION с более низкой версией или любым по умолчанию, если клиент отправляет SSH_FXP_INIT

Я считаю, что сервер нарушает стандарт, отвечая на более высокую версию, чем запрашиваемый клиент. Но я знаю, что SFTP-сервер OpenSSH делает это. Он игнорирует, что клиент запрашивает и всегда отвечает с 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 было изменено так, чтобы оно включало сообщения об ошибках полей и тег языка.

Так что вполне вероятно, что ваш клиент SFTP 2 может взаимодействовать с сервером SFTP 3, если клиент не подавиться дополнительного поля в SSH_FXP_STATUS ответов.

На самом деле SFTP-сервер OpenSSH, отвечая на 3, ведет себя как 2, если клиент попросил 2 (это imho еще одно нарушение спецификации). Он специально не добавляет error message поля к SSH_FXP_STATUS ответам, который был добавлен только в 3.

моей другой тестовой машины (оракул MFT), которая поддерживает только версии 3, не посылает SSH_FXP_VERSION пакета, но SSH_FXP_STATUS с информацией и не происходит связь

Это imho правильное поведение, прискорбно для вас.

+0

Спасибо за ответ Martin, но я хотел бы уточнить свою ситуацию немного больше: 1-й случай: мой клиентский код всегда отправляет версию 2 (это жестко закодировано), и вы можете предположить, что это устаревший код. При отправке этого файла на SFTP-сервер (мой тестовый компьютер) он отправляет обратно версию 3. Надеюсь, это ответ по умолчанию с сервера. Но общение прекрасно работает. 2-й случай: мой клиентский код всегда отправляет версию 2 (это жестко закодировано), а моя другая тестовая машина (oracle MFT), которая поддерживает только версию 3, не отправляет пакет SSH_FXP_VERSION, но SSH_FXP_STATUS с информацией, а не с сообщением. ? –

+0

Итак, мой вопрос вращается на сервере sftp, то есть ... обязательным является для SFTP-сервера отвечать SSH_FXP_VERSION с более низкой версией или любой версией по умолчанию, если клиент отправляет SSH_FXP_INIT. Или сервер игнорирует клиентов SSH_FXP_INIT и отправляет SSH_FXP_STATUS? По моему пониманию, после того, как произойдет согласование, за версией последуют как клиент, так и сервер. Пожалуйста, поправьте меня, если я ошибаюсь. –

+0

См. Мой обновленный ответ. –

Смежные вопросы