Как удаленно копировать файлы / каталоги из linux в windows на экземпляре AWS EC2, используя Python? - PullRequest
1 голос
/ 11 октября 2019

Я пытаюсь скопировать каталоги с сервера linux на компьютер с Windows, на котором оба экземпляра AWS EC2 используют Python, но не может этого сделать.

Я попробовал команду scp, которая, похоже, не работает на экземплярах AWS,также попытался использовать sftp-клиент модуля paramiko в python, который также не работает, и выдал ошибку доступа к пути расположения Windows.

localpath = 'D:/Temp'
remotepath = '/home/temp'
ssh=paramiko.SSHClient()
ssh.set_missing_host_key_policy(paramiko.AutoAddPolicy())
ssh.connect(hostname=HOST,port=PORT,username=USERNAME,key_filename=KEY)
sftp=ssh.open_sftp()
sftp.put(localpath,remotepath)
sftp.close()
ssh.close()

Ниже приведена ошибка:

Error:
Traceback (most recent call last):
  File "test.py", line 12, in <module>
    sftp.put(localpath,remotepath)
  File "C:\Python27\lib\site-packages\paramiko\sft
    with open(localpath, "rb") as fl:
IOError: [Errno 13] Permission denied: 'D:\\Temp'

Ответы [ 2 ]

0 голосов
/ 06 ноября 2019

Можете попробовать мой пример:

import os
import paramiko
import datetime


def GetFileFromRemote(host_ip, host_port, host_username, host_password, remote_path, local_path):
    if not os.path.exists(local_path):
        os.makedirs(local_path)
    scp = paramiko.Transport((host_ip, host_port))
    scp.connect(username=host_username, password=host_password)
    sftp = paramiko.SFTPClient.from_transport(scp)

    try:
        remote_files = sftp.listdir(remote_path)
        for file in remote_files:
            local_file = local_path + file
            remote_file = remote_path + file
            sftp.get(remote_file, local_file)
    except IOError:
        return ("remote_path or local_path is not exist")
    finally:
        scp.close()


if __name__ == '__main__':
    host_ip = '1.2.2.152'
    host_port = 22
    host_username = 'user123'
    host_password = 'password123'
    remote_path = '/home/MY/PH/'
    now_date = datetime.datetime.now().strftime('%Y%m%d')+"/"
    local_path = r"D:/CGI/" + now_date
    GetFileFromRemote(host_ip, host_port, host_username, host_password, remote_path, local_path)

Надеюсь вам помочь.

0 голосов
/ 11 октября 2019

Сначала установите putty на вашем сервере Windows.

Затем в Windows cmd выполните:

pscp user@linux_ip:/path/to/file D:/path/to/destination
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...