ポート転送を使用しているときに大きなscpファイル転送を再開するにはどうすればよいですか?


10

私は数ホップ離れたマシンを使用しており、ファイルを転送するためにポート転送を設定する必要があります。

編集:明確にするために、リモートマシンにアクセスするには複数のホップが必要です。私のマシンから、VPNをセットアップしました。ここで10.255.xxにアクセスできます-これは、VPN経由で接続できる唯一のマシンです。.xxにログインすると、他のマシンに接続できます。.yyはその1つです。

私のマシンから:

ssh -L 4567:localhost:4567 me@10.255.x.x

次に、そのマシンから:

ssh -L 4567:localhost:22 me@10.255.y.y

できます

scp -P 4567 me@localhost:/path/to/large/file.gz .

私はこの実行を無理やり残しましたが、転送がいずれかの時点で停止したことがわかりました。

sshではなくrsyncを使用して転送を再開するための提案をいくつか見ましたが、それを設定する方法がわかりません。これは可能ですか?


これらのホップは何のためのものですか?scp me@10.255.x.x:/path/to/large/file.gz .まったく同じことを達成しないでしょうか?クライアントとサーバーにインストールされているscp(ssh)のバージョンは?
デニス

@Dennis:scpは転送の再開をサポートしていません-提案したものはダウンロードを再開します。
クリス2013年

一部のバージョンでは動作します(私のラップトップのscpでは動作しますが、VPSでは動作しません)。私が尋ねている理由は、ホップは私には不要のようであり、ホップなしのrsyncははるかに簡単になるからです。
デニス

この回答も役立つかもしれません:unix.stackexchange.com/a/43097/14084
Bernhard

回答:


9

scpの一部のバージョン(ソースコンピューターのバージョンが重要であると思われる)では、scpコマンドを再実行するだけで転送を再開できます。しかし、注意してください!バージョンが部分転送をサポートしていない場合、部分ファイルは単に上書きされます。

次のrsyncスイッチは、scpがサポートしていない場合に、壊れた転送を再開するのに便利です。

     --append                append data onto shorter files
     --append-verify         like --append, but with old data in file checksum
 -e, --rsh=COMMAND           specify the remote shell to use
     --progress              show progress during transfer

コマンド

rsync --append-verify --progress --rsh="ssh -p 4567" me@localhost:/path/to/large/file.gz .

望ましい効果が得られるはずです。-psshの場合、スイッチは小文字でなければならないことに注意してください。


宛先サーバーのネットワークの構成方法のため、ホップが必要です。sshでrsyncを使用する場合の問題は、ローカルポート4567を使用する必要があることです。このファイルは10.255.xxサーバーに存在しません。
クリス

私の間違い。それが10.255.y.yクライアントコンピュータだと思っていました。
Dennis

回答を更新しました。
Dennis

そしてrsyncを使用する方法がない場合はどうしますか?私の場合、リモートホストで使用できるのはFTPだけです。
dr.dimitru 2016

1
@Enzo 質問はSCPに関するものであり、答えはscpに関する必要があります。問題は、scpツールではなく、不完全なscp転送についてです。文字通り、sshではなくrsyncを使用して転送を再開するためのいくつかの提案を見てきましたが、その設定方法は不明です。これは可能ですか?下部に。
デニス

2

scpの代わりにsftpを使用する

あなたの場合:

sftp -a -P 4567 me@localhost:/path/to/large/file.gz .

sftpのmanページから:

-a      Attempt to continue interrupted downloads rather than overwriting existing partial or complete copies of files.  If the remote file contents differ from the partial local copy then the resultant file is likely to be corrupt.

1

rsyncはデフォルトでsshを使用します。rsyncの-eスイッチを使用して正確なsshコマンドを指定する必要がある場合があります。また、転送を再開できるように不完全なファイルを保持する--partialもあります。


-1

私はあなたのトンネルの要点が本当にわからないので、ここに私があなたの問題を解決する方法を示します:

ssh -R $tunnelPort:localhost:$localSSHPort $remoteUser@$remoteHost -p $remoteSSHPort

これにより、ローカルマシン(localhost)からリモートマシン(remotehost)への逆方向トンネルが開きます。$ tunnelPortは、リモートホストでトンネルが見つかるポートです。$ localSSHPortはローカルsshdが実行されるポートで、$ remoteSSHPortはリモートホストのsshdが待機する場所です。

(リバース!)トンネルの内部にいるので、デニスが提案したことを多かれ少なかれ行うことができます。

rsync --apend-verify -az -e 'ssh -p $tunnelPort' /path/to/large/file $user@localhost:/destination

-aフラグと-zフラグについては、rsyncのmanページで説明されているため、詳しくは説明しません。上記のようにリモートホストでrsyncを実行すると、すべてのデータがポート$ tunnelPortにプッシュされ、ローカルホストのsshd $ localSSHPortに転送されます。

お役に立てば幸いです。


@ingenous:トンネルの説明を追加しました。
クリス2013年
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.