How can I use sftp and mput with Python?

Question:

I’m trying to send over multiple files from one server to another using Python. I’ve found a few ssh2 libraries, but either I can’t find documentation on them (e.g. ssh), or they don’t seem to support mput.

Anyone know of any sftp libraries which support mput?

Asked By: Mark Roach

||

Answers:

Paramiko is a library that handles SSH and related things, such as SFTP, but it only supports a regular put, no mput that I can see.

What exactly does mput do? My sftp client doesn’t have that command…

Guessing from the name, I’m thinking “multiple puts” or something like that, to send multiple files in one go? If that is the case, I suggest just looping over your list of files and using put.

Answered By: Epcylon

I was faced with a similar problem a long time ago and could not get a satisfactory mput-method to run in Python. So the paramiko library seemed to make the most sense to me.

To enable progress output or other actions in your Python application, it is advantageous to send the files individually in a for-loop. However, the overhead increases minimally with this variant.

A small Paramiko-example code :

    import pysftp
    import os
    
    list_files_to_transfer = []

    # Check if List is empty
    if list_files_to_transfer:

        # Advanced connection options beyond authentication
        cnopts = pysftp.CnOpts()
        
        # Compression for lower Transfer-Load
        cnopts.compression = True
        cnopts.hostkeys = None

        # Establish a connection with the SFTP server
        with pysftp.Connection(host=host, username=username, port=port,
                               private_key=os.path.abspath(path_private_key), 
                               cnopts=cnopts) as sftp:

            # Change to the specified remote directory
            with sftp.cd(self.path_remote_sink_folder):

              # browse the list of files
              for file in list_files_to_transfer:
              
                # Upload the file to the server
                sftp.put(file)

                    
Answered By: Ferdinand Nittnaus
Categories: questions Tags: ,
Answers are sorted by their score. The answer accepted by the question owner as the best is marked with
at the top-right corner.