Python - 在两个远程服务器之间传输文件,执行python脚本

时间:2013-01-31 12:11:34

标签: python paramiko

我正在尝试从localServer的两个服务器之间复制文件,例如从server-A复制到server-B。我在python中使用paramiko包。

因此有三个服务器,localServerserver-Aserver-B。请看下面的代码,这是自我解释的,请告诉我出错的地方。

我正在使用的算法:

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

    从日志中,我知道从server-Aserver-B的连接成功,但之后SFTP部分无法正常工作!

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

    请在我出错的地方帮助我。

    server-A,file: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()
    

    localServer,paramiko_test.py:

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

    stderr.readlines()的输出是:

    Traceback (most recent call last):
     File "/home/sitaram/sumanth/test_progs/copy.py", line 12, in <module>
     sftp1.put('./sumanth_temp.txt','/home/ncloudadmin/sumanth.txt' ) 
     File "/usr/lib/pymodules/python2.6/paramiko/sftp_client.py", line 558, in put
     file_size = os.stat(localpath).st_size
    OSError: [Errno 2] No such file or directory: './sumanth_temp.txt'
    

1 个答案:

答案 0 :(得分:6)

问题是一年之久,所以可能不再相关,但也许对其他人有用。问题出在你的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")