1
로컬 컴퓨터에서 proftpd를 사용하여 SFTP 서버를 설정했습니다. 약 30000 자보다 큰 파일을 업로드 할 때 시간 초과된다는 점을 제외하고는 정상적으로 작동합니다.paramiko를 통해 큰 파일을 proftpd에 업로드하면 시간이 초과됩니다.
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 분 후, 프로그램이 종료하고이 오류를 뱉어 : 1.15와 proftpd에 1.3.5
paramiko 사용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