Я установил SFTP-сервер, используя proftpd на моем локальном компьютере. Он отлично работает, за исключением того, что время при загрузке файлов превышает примерно 30000 символов.Загрузка больших файлов в proftpd через paramiko times out
Загрузка из командной строки через proftpd работает без проблем, а также использование paramiko для загрузки на другой SFTP-сервер также работает. Это заставляет меня думать, что есть ошибка, связанная с взаимодействием между paramiko и proftpd.
Я сделал небольшой скрипт, чтобы проиллюстрировать эту проблему:
import paramiko
transport = paramiko.Transport(('localhost', 2220)) # my proftpd SFTP port
transport.connect(username='x', password='x')
client = paramiko.SFTPClient.from_transport(transport)
with open('testimage.jpg') as f: # 35241 characters
content = f.read()
with client.open('testimage.jpg', 'w') as f:
f.write(content)
Мой SFTP конкретной конфигурации ProFTPD:
<IfModule mod_sftp.c>
<VirtualHost 0.0.0.0>
Include /etc/proftpd/conf.d
SFTPEngine on
SFTPLog /var/log/proftpd/sftp.log
Port 2220
SFTPHostKey /etc/ssh/ssh_host_rsa_key
SFTPHostKey /etc/ssh/ssh_host_dsa_key
SFTPAuthMethods password
SFTPCompression delayed
MaxLoginAttempts 3
</VirtualHost>
</IfModule>
Через 10 минут, программа завершает работу и выкладывает эту ошибку:
Traceback (most recent call last):
File "ftptest.py", line 9, in <module>
f.write(content)
File "/Library/Python/2.7/site-packages/paramiko/file.py", line 330, in write
self._write_all(data)
File "/Library/Python/2.7/site-packages/paramiko/file.py", line 447, in _write_all
count = self._write(data)
File "/Library/Python/2.7/site-packages/paramiko/sftp_file.py", line 176, in _write
self._reqs.append(self.sftp._async_request(type(None), CMD_WRITE, self.handle, long(self._realpos), data[:chunk]))
File "/Library/Python/2.7/site-packages/paramiko/sftp_client.py", line 668, in _async_request
self._send_packet(t, msg)
File "/Library/Python/2.7/site-packages/paramiko/sftp.py", line 170, in _send_packet
self._write_all(out)
File "/Library/Python/2.7/site-packages/paramiko/sftp.py", line 135, in _write_all
raise EOFError()
EOFError
Использование paramiko 1,15 и ProFTPD 1.3.5