Python-在两个远程服务器之间传输文件,但Python脚本除外

Python-在两个远程服务器之间传输文件,但Python脚本除外,python,paramiko,Python,Paramiko,我试图在两台服务器之间从localServer复制一个文件,比如从server-a复制到server-B。我正在使用python中的paramiko包 因此有三个服务器,即,localServer,server-A和server-B。请看下面的代码,这是不言自明的,请让我知道我哪里出错了 我使用的算法: 我正在尝试从localServer运行paramiko_test.py文件 paramiko_test.py执行server-A中的copy.py文件 copy.py使用SFTP将server-

我试图在两台服务器之间从
localServer
复制一个文件,比如从
server-a
复制到
server-B
。我正在使用python中的paramiko包

因此有三个服务器,即,
localServer
server-A
server-B
。请看下面的代码,这是不言自明的,请让我知道我哪里出错了

我使用的算法:

  • 我正在尝试从
    localServer
    运行
    paramiko_test.py
    文件
  • paramiko_test.py
    执行
    server-A
    中的
    copy.py
    文件
  • copy.py
    使用SFTP将
    server-A
    中的文件
    source.txt
    复制到
    server-B
  • 当我从
    server-A
    运行
    copy.py
    时,它工作正常。但是当我从
    localServer
    运行
    paramiko_test.py
    (它在
    server-A
    中间接执行
    copy.py
    )时,它不工作

    从日志中,我知道有一个从
    server-a
    server-B
    的成功连接,但在此之后,SFTP部分不工作

    问题:我们可以在SFTP客户端中调用SFTP客户端吗?有没有更好的方法在两台服务器之间复制文件

    请告诉我哪里出了问题

    服务器A,文件:copy.py:

    import paramiko
    
    ssh = paramiko.SSHClient()
    ssh.set_missing_host_key_policy(paramiko.AutoAddPolicy())
    ssh.connect('<server-B-IP>', username='serverB', password='passwd')
    
    print "connected successfully!"
    
    sftp = ssh.open_sftp()
    print sftp
    sftp.put('source.txt','/home/serverB/destination.txt' )
    sftp.close()
    print "copied successfully!"
    
    ssh1.close()
    exit()
    
    import paramiko
    
    ssh = paramiko.SSHClient()
    ssh.set_missing_host_key_policy(paramiko.AutoAddPolicy())
    ssh.connect('<server-A-IP>', username='serverA', password='passwd')
    
    print "connected successfully!"
    
    stdin, stdout, stderr = ssh.exec_command("python /home/username/copy.py")
    
    print stdout.readlines()
    
    print "copied successfully!"
    
    ssh.close()
    exit()
    

    这个问题已经有一年了,所以可能不再相关了,但它可能对其他人有用。问题出在您的copy.py中

    sftp.put('source.txt','/home/serverB/destination.txt' )
    
    source.txt位于哪里?提供完整路径,或者如果文件始终与copy.py位于同一目录中,则可以修改paramiko_test.py

    ssh.exec_command("cd /home/username/; python /home/username/copy.py")
    

    你看过布料吗?这比帕拉米科要容易一点,可以做一些事情,比如你好,亚历克斯,谢谢你的回复。我查看了Fabric,没有看到任何支持两个远程主机之间文件传输的Fabric,它在另一个本地服务器上运行脚本。或者它是由织物支撑的??请提供帮助。您可以通过SSH连接到其中一个远程服务器,然后通过SFTP/SCP连接吗?您的
    sterr
    中是否有任何内容?print stderr.readlines()的输出是
    [“回溯(最近一次调用):\n',
    文件/home/username/copy.py],第12行,in\n',
    文件“/usr/lib/pymodules/python2.6/paramiko/sftp_client.py”,第558行,输入“,
    'file_size=os.stat(localpath).st_size\n”,
    “OSError:[Errno 2]没有这样的文件或目录:'./source.txt'\n”]
    但是我看到source.txt存在于正确的目录中!!
    sftp.put
    sftp.get
    是否确保
    ssh.exec\u命令在完成文件传输之前不会执行?
    
    ssh.exec_command("cd /home/username/; python /home/username/copy.py")