У меня есть выделенный сервер с 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, которую он готов использовать для сеанса, и затем клиент и сервер продолжают оттуда.
В первом примере журнала вы можете увидеть, что клиент отправил свою версию на сервер:
6 марта 13:52:37 локальный sftp-сервер[2120]: получен клиент версии 3
Эта строка отсутствует во втором образце журнала. Самое простое объяснение этому — клиент ее не отправлял.
Короче говоря, похоже, что используемый во втором случае SFTP-клиент неисправен. Он не отправляет сообщение, которое должен отправить для начала обмена SFTP.