SFTP が機能しない (SSH は機能する) のはなぜですか?

SFTP が機能しない (SSH は機能する) のはなぜですか?

Ubuntu Server 16.04 + VestaCP を搭載した専用サーバーがあります。SSH アクセスは問題なく動作しますが、SFTP が故障しました。いつ故障したのかはわかりませんが、それ以前はすべて正常に動作していました。

ローカルマシンから sftp に接続すると、動作します:

Mar  6 13:52:37 local sftp-server[2120]: session opened for local user user1 from [10.10.80.120]
Mar  6 13:52:37 local sftp-server[2120]: received client version 3
Mar  6 13:52:37 local sftp-server[2120]: debug3: request 1: realpath
Mar  6 13:52:37 local sftp-server[2120]: realpath "."
Mar  6 13:52:37 local sftp-server[2120]: debug1: request 1: sent names count 1

リモート ホストから実行しようとすると、次の 1 行が表示されます。

Mar  6 19:34:06 server sftp-server[3545]: session opened for local user root from [xxx.xxx.xxx.xxx]

何も起こらず、タイムアウトにより接続が切断されます。エラーは発生せず、この問題の原因を特定できません。

/etc/ssh/sshd_config にデフォルト設定があります:

Subsystem sftp /usr/lib/openssh/sftp-server -l debug3

これを internal-sftp に置き換えたくありません。以前動作していたので、変更なしで動作するはずです。

答え1

SFTPクライアントがSFTPサーバーに接続すると、最初のデータ交換必要なのは、クライアントが SFTP プロトコル バージョンをサーバーに送信することです。サーバーは、セッションで使用する SFTP プロトコル バージョンで応答し、クライアントとサーバーはそこから処理を進めます。

最初のログの例では、クライアントがそのバージョンをサーバーに送信したことが分かります。

3月6日 13:52:37 ローカルsftp-server[2120]: クライアントバージョン3を受信しました

その行は 2 番目のログ サンプルには存在しません。最も単純な説明は、クライアントがそれを送信しなかったということです。

つまり、2 番目のケースで使用されている SFTP クライアントが故障しているようです。SFTP 交換を開始するために送信すべきメッセージが送信されていません。

関連情報