5

localServerから、たとえばからserver-Aへの2つのサーバー間でファイルをコピーしようとしていますserver-B。Pythonでparamikoパッケージを使用しています。

つまり、、、の3つのサーバーがlocalServerありserver-Aますserver-B。以下のコードを参照してください。これは自明であり、どこが間違っているのか教えてください。

私が使用しているアルゴリズム:

  1. paramiko_test.pyからファイルを実行しようとしていますlocalServer
  2. paramiko_test.pycopy.pyでファイルを実行しますserver-A
  3. copy.pySFTPを使用してファイルsource.txtファイルをコピーします。server-Aserver-B

copy.pyから実行するserver-Aと、正しく機能しています。しかし、(で間接的に実行される)paramiko_test.pyから実行すると、機能しません!localServercopy.pyserver-A

server-Aログから、からへの接続が成功していることがわかりましたがserver-B、その後、SFTP部分が機能していません。

質問: SFTPクライアント内でSFTPクライアントを呼び出すことはできますか?2つのサーバー間でファイルをコピーするためのより良い方法はありますか?

私が間違っているところを助けてください。

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'
4

1 に答える 1

8

質問は1年前のものなので、おそらくもう関係ありませんが、他の人には役立つかもしれません。問題は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 に答える