5

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

所以有三台服务器,即localServerserver-Aserver-B。请参阅下面的代码,这是不言自明的,请让我知道我哪里出错了。

我正在使用的算法:

  1. 我正在尝试paramiko_test.pylocalServer.
  2. paramiko_test.py中执行copy.py文件server-A
  3. copy.py将文件source.txt文件复制server-Aserver-B使用 SFTP。

当我从 运行copy.pyserver-A,它工作正常。但是当我paramiko_test.pylocalServer(间接执行)运行copy.pyserver-A,它不起作用!

从日志中,我知道从server-Ato连接成功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()

本地服务器,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'
4

1 回答 1

8

问题已经存在一年了,所以可能不再相关,但也许对其他人有用。问题出在您的 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")
于 2014-12-05T13:40:12.367 回答