次のようなネットワーク構造があると仮定します。
local machine ---X--- machine A
| |
| Z
| |
---Y---- machine B
次に、現在リンクを介してダウンロードしX
、次にリンクを介してアップロードしていY
ます。machine A
と直接話すことができる場合はmachine B
、リンクZ
も存在します。これは、との両方machine A
がmachine B
公的にアクセス可能である場合です。
したがってmachine A
、への画像の直接転送を開始する必要がありますmachine B
。この時点でmachine A/B
、転送を処理しているのは実行中のコードであるため、Pythonソリューションは転送を開始するのに役立つだけである可能性があります。
を使用してbashシェルからこれを実行している場合は、次のssh
ように入力します。
ssh user@machineA 'scp myfile user@machineB'
machine A
これは、上のsshサーバーへのシェルアクセスがあり、scp
プログラムがインストールされていることを前提としています。Paramikoはmachine A
、転送自体を処理するためではなく、転送を開始するための接続を確立する場合にのみ役立ちます。
このようなものが機能する可能性があります:
ssh = paramiko.SSHClient()
ssh.connect('machineA', username='user', password='passwd')
stdin, stdout, stderr = ssh.exec_command("scp '{imgpath}' user@machineB".format(
imgpath='path/to/file/on/machineA')
アップデート:
画像が提供されているが、sshログインアクセスがない場合は、ログインして画像をフェッチするコマンドを実行する machine A
ことで、画像を直接プルできます。通常、これに使用できます。したがって、これを行うためのコードは次のようになります。machine B
machine B
wget
localhost
ssh = paramiko.SSHClient()
ssh.connect('machineB', username='user', password='passwd')
stdin, stdout, stderr = ssh.exec_command("wget '{imgurl}'".format(
imgurl='http://url.to.image/file')
テストでは、paramikoの使用をスキップし、ssh/wgetを直接使用します。