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 交換を開始するために送信すべきメッセージが送信されていません。