2016-10-20 12 views
1

SFTPクライアントは、最初にSSH_FXP_INIT(バージョン2)を送信します。 SFTPサーバーがSSH_FXP_VERSIONを送信しない理由はありますか?その代わりに、SFTPバージョンの不一致 - SFTPサーバーのみがバージョン3をサポートします

SFTPサーバのみのバージョン3バージョン交渉が可能であるどのようにして

をサポートする情報とSSH_FXP_STATUSを送信していますか?
または、実行する必要があるものがありませんか?

問題を理解して助けてくれる人がいれば、もっと状況を詳しく説明できます。助けてください!

答えて

2

SFTP specificationを読む:

ファイル転送プロトコルが起動すると、クライアントが最初のサーバに(そのバージョン番号を含む) SSH_FXP_INITパケットを送信します。 サーバは、SSH_FXP_VERSIONパケットで応答し、最低値の とクライアントのバージョン番号を指定します。両者 は、特定のバージョンの プロトコルに従ってください。

お客様のクライアントは、SFTPバージョン2(および多分古いもの)のみをサポートしています。あなたのサーバーはSFTPバージョン3をサポートしています。だから交渉は失敗する。

3未満のSFTPプロトコルバージョンは実際には使用されませんでした。したがって、SFTPの実装ではこれらのバージョンをサポートしていないことはよくあることです。バージョン3は、最も広く使用されているバージョン(新しいバージョンをサポートしていないOpenSSHによってサポートされています)です。


私のクライアントコードは、常にSFTPサーバーにこれを送信するには...バージョン2を送信し、それはバージョン3

を送り返しSFTPサーバが低いバージョンまたはいずれかとSSH_FXP_VERSIONを返信することが必須ですクライアントがSSH_FXP_INITを送信した場合のデフォルトのバージョン

私は、クライアントが要求したバージョンより高いバージョンで応答することで、サーバーが標準に違反していると考えています。しかし、私は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として動作します(これはimhoですが、仕様違反です)。それは、具体的情報をSSH_FXP_VERSIONパケットを送信しないだけで3

私の他のテストマシンのみのバージョン3をサポート(オラクルMFT)、で追加されましたSSH_FXP_STATUS応答にerror messageフィールドを追加しますが、SSH_FXP_STATUSていません通信は行われません。

これは正しい動作ですが、あなたにとっては不幸です。

+0

私の状況をもう少し明確にしたいのですが、返信いただきありがとうございます。 第1のケース:クライアントコードは常にバージョン2を送信します(これはハードコードされています)、これは従来のコードと見なすことができます。これをSFTPサーバ(私のテストマシン)に送信すると、バージョン3が返されます。うまくいけば、これはサーバからのデフォルトの返信です。しかし、通信は正常に動作します。 第2のケース:私のクライアントコードは常にバージョン2(ハードコード)を送信し、バージョン3のみをサポートする他のテストマシン(oracle MFT)はSSH_FXP_VERSIONパケットを送信しませんが、情報なしのSSH_FXP_STATUSは通信しません。 ? –

+0

私の質問はsftpサーバを中心にしています。つまり、クライアントがSSH_FXP_INITを送信した場合、SFTPサーバが下位バージョンまたは任意のデフォルトバージョンでSSH_FXP_VERSIONに返信することは必須です。 または、サーバーがクライアントSSH_FXP_INITを無視し、SSH_FXP_STATUSを送信していますか?私の理解によれば、交渉が行われると、バージョンは後でクライアントとサーバーの両方で追跡されます。私が間違っているなら、私を修正してください。 –

+0

私の更新された回答を参照してください。 –

関連する問題