2016-07-20 54 views
1

pythonを使用して、あるリモートサーバーから別のリモートサーバーにファイルをコピーする最適な方法を理解したいと思います。Python:2つのリモートサーバー間でファイルをコピーする

私のセットアップは次のようになります。

+--------------+ 
| Server A |                    
+--------------+                 
| Build Server | 
+--------------+ 
     | 
     | 
+-------------+ 
| Server B | 
+-------------+ 
| Python Code | 
+-------------+ 
     | 
     | 
+------------+ 
| Server C | 
+------------+ 
| App Server | 
+------------+ 

は私が持っているいくつかのRPMのビルドサーバーに保存されています。これらのバイナリは、私がこのボックスにインストールできるように、Appサーバーに転送する必要があります。

現在、私はPythonのParamikoライブラリ[sftp.getとsftp.put]を使用しており、サーバAからサーバBにバイナリを取得し、サーバBからサーバCに転送しています。バイナリはサーバーAからサーバーCに直接転送できますか?

、より正確にこのような何かを:

scp -3 [email protected]:/home/user1/file1.txt [email protected]:/home/user2/file1.txt 

中間ホップを回避し、この種の。

提案/改善が大変ありがとうございます。

答えて

1

私は rsyncを使用してこの問題を処理します。 あなただけの直接subprocessモジュールを使ってPythonからscpを呼び出すか、ラップや実装、既存のPythonモジュールを試すことができるかもしれないrsync

paramiko経由で必要なすべての操作を行うよりも、サブプロセスを経てscpを呼び出すことがはるかに容易になります。

+0

「scp」とは異なり、rsyncは2つのリモートホスト間でコピーすることはできません。 'rsync'コマンドを実行するには、リモートホストの1つに' ssh'する必要があります。 'scop'や' rsync'を呼び出すのに 'サブプロセス 'を使うだけでは、Pythonの実装を見つけるよりも良いかもしれませんが、私は同意します。 –

+0

これはどうでしょうか? 'ssh user1 @ remote1 'rsync -avz/path/to/source user2 @ remote2:/ path/to/dest'' –

関連する問題