How to send a file using scp using python 3.2?
Question: I'm trying to send a group of files to a remote server through no-ack's python
byndings for libssh2, but I am totally lost regarding the library usage due to
the lack of documentation.

I've tried using the C docs for libssh2 unsuccesfully.

Since I'm using python 3.2, paramiko and pexpect are out of the question.
Anyone can help?

EDIT: I just found some code in no-Ack's blog comments to his post.

    
    
    import libssh2, socket, os
    
    SERVER = 'someserver'
    username = 'someuser'
    password = 'secret!'
    
    sourceFilePath = 'source/file/path'
    destinationFilePath = 'dest/file/path'
    
    sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
    sock.connect((SERVER, 22))
    
    session = libssh2.Session()
    session.startup(sock)
    
    session.userauth_password(username, password)
    
    sourceFile = open(sourceFilePath, 'rb')
    
    channel = session.scp_send(destinationFilePath, 0o644, os.stat(sourceFilePath).st_size)
    
    while True:
        data = sourceFile.read(4096)
        if not data:
            break
        channel.write(data)
    
    exitStatus = channel.exit_status()
    channel.close()
    

Seems to work fine.


Answer: And here's how to **get** files with libssh2 in Python 3.2. Major kudos to no-
Ack for showing me this. You'll need the Python3 bindings for libssh2
<https://github.com/wallunit/ssh4py>

    
    
    import libssh2, socket, os
    
    SERVER = 'someserver'
    username = 'someuser'
    password = 'secret!'
    
    sourceFilePath = 'source/file/path'
    destinationFilePath = 'dest/file/path'
    
    
    sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
    sock.connect((SERVER, 22))
    
    session = libssh2.Session()
    session.startup(sock)
    
    session.userauth_password(username, password)
    (channel, (st_size, _, _, _)) = session.scp_recv(sourceFilePath, True)
    
    destination = open(destinationFilePath, 'wb')
    
    got = 0
    while got < st_size:
        data = channel.read(min(st_size - got, 1024))
        got += len(data)
        destination.write(data)
    
    exitStatus = channel.get_exit_status()
    channel.close()
    

