How to send a file using scp using python 3.2?

て烟熏妆下的殇ゞ 提交于 2019-12-24 04:12:10

问题


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.


回答1:


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()



回答2:


To do this in Python (i.e. not wrapping scp through subprocess.Popen or similar) with the Paramiko library.

Revelent : https://stackoverflow.com/a/69596/1270589




回答3:


Below is easy but it is not universal means works if you run in linux dosent work if you run in windows. tell me if you know to make below universal i.e across all O.S platforms.

import os

os.system("sshpass -p 'your password' scp /opt/pysftp_server.txt root@172.19.113.87:/home")


来源:https://stackoverflow.com/questions/14367020/how-to-send-a-file-using-scp-using-python-3-2

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!