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

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

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

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

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


person Mohit Singhal    schedule 20.10.2016    source источник


Ответы (1)


Прочтите спецификацию SFTP:

Когда запускается протокол передачи файлов, клиент сначала отправляет серверу пакет 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.

На самом деле существует очень небольшая разница между 3 и 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 (это, по-моему, еще одно нарушение спецификации). Он специально не добавляет поле error message к ответам SSH_FXP_STATUS, которое было добавлено только в 3.

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

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

person Martin Prikryl    schedule 20.10.2016
comment
Спасибо Мартину за терпение, которое он выслушал и подробно объяснил. Теперь все имеет смысл. Большое спасибо. - person Mohit Singhal; 21.10.2016