3

libssh2のno-ackのpython byndingsを介してファイルのグループをリモートサーバーに送信しようとしていますが、ドキュメントが不足しているため、ライブラリの使用法について完全に迷っています。

libssh2 の C ドキュメントを使用しようとしましたが、失敗しました。

私はpython 3.2を使用しているので、paramikoとpexpectは問題外です。誰でも助けることができますか?

編集: no-Ack のブログ コメントで彼の投稿にいくつかのコードを見つけました。

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

うまくいくようです。

4

3 に答える 3

5

Python 3.2 で libssh2 を使用してファイルを取得する方法は次のとおりです。これを見せてくれたno-Ackに大きな称賛を。libssh2 の Python3 バインディングが必要です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()
于 2013-05-02T14:47:06.963 に答える
0

Python でこれを行うには (つまり、subprocess.Popen などを介して scp をラップしないでください)、Paramiko ライブラリを使用します。

敬虔な : https://stackoverflow.com/a/69596/1270589

于 2017-01-24T19:30:42.470 に答える