用于将文件和目录从一个远程服务器复制到另一个远程服务器的Python脚本

2024-10-03 02:36:26 发布

您现在位置:Python中文网/ 问答频道 /正文

我正在本地计算机上运行一个python脚本-ssh.py,将文件和目录从一个远程服务器(ip=35.189.168.20)传输到另一个远程服务器(ip=10.243.96.94)

这就是我的代码的外观:

HOST = "35.189.168.207"
USER = "sovith"
PASS = "xxx"
destHost = "10.243.96.94"
destUser = "root"
destPass = "xxx"

#SSH Connection
client1=paramiko.SSHClient()
client1.set_missing_host_key_policy(paramiko.AutoAddPolicy())
client1.connect(HOST,username=USER,password=PASS)

#SFTP inside SSH server connection
with pysftp.Connection(host=destHost, username=destUser, password=destPass) as sftp:
    #put build directory - sftp.put_r(source, destination)
    sftp.put_r('/home/sovith/build' , '/var/tmp') 
    sftp.close()
client1.close()

让我告诉你所有的目录路径和一切都是正确的。我只是觉得代码中有一些逻辑错误。执行后得到的输出是:

Traceback (most recent call last):
  File "ssh.py", line 108, in <module>
    func()
  File "ssh.py", line 99, in func
    sftp.put_r('/home/sovith/nfmbuild' , '/var/tmp')
  File "/Library/Frameworks/Python.framework/Versions/3.8/lib/python3.8/site-packages/pysftp/__init__.py", line 427, in put_r
    os.chdir(localpath)
FileNotFoundError: [Errno 2] No such file or directory: '/home/sovith/build'

你能不能纠正我代码中的错误,或者提出更好的方法来完成任务。简单地说,我需要一个脚本在两个远程服务器之间复制文件和目录


Tags: 代码inpybuild目录脚本home远程
2条回答

从错误消息中,能否确认源目录/home/sovith/build(或/home/bgnanasekaran/nfmbuild)存在

一个好的做法是在调用sftp.put_r()之前检查,即:

from pathlib import Path

d = Path('/home/sovith/build')
if d.exists():
  sftp.put_r('/home/sovith/build' , '/var/tmp')
else:
  print("Your source doesn't exist")

那是不可能的。不是你做这件事的方式。打开到一个远程服务器的连接这一事实并不能使以下代码神奇地工作,就好像它是在该服务器上执行的一样。它仍然在本地机器上运行。因此代码试图上传本地文件(不存在)


实际上,无法从本地计算机在两个远程SFTP服务器之间传输文件

通常,您需要将文件从第一台服务器下载到本地临时目录。然后将它们上载到第二台服务器。
Python PySFTP transfer files from one remote server to another remote server


另一个选项是使用SSH连接到一个远程服务器,然后在该服务器上运行SFTP客户端,将文件传输到第二个服务器或从第二个服务器传输文件

但这不是从一个SFTP服务器复制到另一个SFTP服务器。这是从一个SSH服务器复制到SFTP服务器。您需要SSH访问,仅仅SFTP访问是不够的

要执行远程SSH服务器的命令,请使用pysftp^{}。尽管使用PySTFP在服务器上执行命令有点过分。您可以直接使用Paramiko:
Python Paramiko - Run command
(PySTFP只是一个包装器,它围绕着Paramiko,具有更高级的SFTP功能)

相关问题 更多 >