如何使用 Python SFTP/Paramiko 将 zip 文件从一台服务器传输到另一台服务器

Posted

技术标签:

【中文标题】如何使用 Python SFTP/Paramiko 将 zip 文件从一台服务器传输到另一台服务器【英文标题】:How to transfer zip files from one server to another using Python SFTP/Paramiko 【发布时间】:2021-12-25 06:08:13 【问题描述】:

我正在尝试使用 Python 脚本在两台服务器之间进行 SFTP。起初,我尝试将文件下载到本地计算机,但由于权限错误而失败,不知道为什么限制将文件复制到本地文件夹。

任何想法都会受到赞赏。下面是代码sn-p(只完成了一半)

import paramiko

host= <defined here>
user = <defined here>
pswd = <defined here>

ssh = paramiko.SSHClient()
# automatically add keys without requiring human intervention
ssh.set_missing_host_key_policy( paramiko.AutoAddPolicy() )
ssh.connect(host, username=user, password=pswd)
ftp = ssh.open_sftp()

ftp.get(source_path,destination_path)

ftp.close()

【问题讨论】:

【参考方案1】:

编辑: 请亲自阅读传说,@Martin Prikryl 的评论以获得更深入的解释和更好的解决方案。

这能解决问题吗?

import paramiko

from_host = <defined here>
from_user = <defined here>
from_pass = <defined here>

to_host = <defined here>
to_user = <defined here>
to_pass = <defined here>

from_client = paramiko.SSHClient()
# automatically add keys without requiring human intervention
from_client.set_missing_host_key_policy( paramiko.AutoAddPolicy() )
from_client.connect(from_host, username=from_user, password=from_password)

to_client = paramiko.SSHClient()
# automatically add keys without requiring human intervention
to_client.set_missing_host_key_policy( paramiko.AutoAddPolicy() )
to_client.connect(to_host, username=to_user, password=to_password)

# Open an sftp client for both servers
from_ftp = from_client.open_sftp()
to_ftp = to_client.open_sftp()

# Open the file on the from server. Returns a file like object
with from_ftp.open(source_path) as f:
    # putfo takes an open file object and creates it at the specifies path
    to_ftp.putfo(f, path_where_you_want_the_file_on_to_server)  # need filename

from_ftp.close()
to_ftp.close()

SFTPClient documentation

【讨论】:

+1 - 虽然见Reading file opened with Python Paramiko SFTPClient.open method is slow。 + AutoAddPolicy 以这种方式使用不会“无需人工干预自动添加密钥”。相反,它总是盲目地允许任何主机密钥,什么是安全漏洞(我知道您从问题中复制了代码)。有关正确的解决方案,请参阅Paramiko "Unknown Server"。

以上是关于如何使用 Python SFTP/Paramiko 将 zip 文件从一台服务器传输到另一台服务器的主要内容,如果未能解决你的问题,请参考以下文章

python paramiko模块:远程连接服务器

paramiko上传文件到Linux

python远程下载

用python脚本把windows的文件上传到linux中

paramiko--密钥连接远端服务器并递归目录

python:正则1