Search code examples
pythonsftpparamikopysftp

pysftp and paramiko stop uploading files after a few seconds


I am using python 3.4 and pysftp , (pysftp suspected to be working on 3.4)

Pysftp is a wrapper over paramiko.

I have no problem downloading files.

I can also upload small files.

When i am uploading files that take longer than a few seconds to complete however i get an error. I monitored my interent connection, after about 3 seconds there is no more uploading taking place.

after ~5 minutes i recieve an EOFError

I also experimented with the paramiko module with the same results.

I can upload files using open ssh as well as filezilla without problem.

with pysftp.Connection(host="host",username="python",
    password="pass",port=2222) as srv:
    print('server connected')

    srv.put(file_name)

I would like to be able to upload files greater than a few kb... what am i missing?


Solution

  • It seems that paramiko is not adjusting window during file uploading. You can increase window_size manually:

    with pysftp.Connection(host="host",username="python",
        password="pass",port=2222) as srv:
        print('server connected')
    
        channel = srv.sftp_client.get_channel()
        channel.lock.acquire()
        channel.out_window_size += os.stat(file_name).st_size
        channel.out_buffer_cv.notifyAll()
        channel.lock.release()
        srv.put(file_name)
    

    It works for me, but sometimes it is not enough for large files so I add some extra bytes. I think, that some packets may be lost and it depends on the connection.