回答:
scp
この目的に使用することができます。SSHプロトコルを使用してファイルを転送する安全な手段です。
たとえば、yourfile.txt
from という名前のファイル~/Downloads
をリモートコンピューターにコピーするには、次を使用します。
scp ~/Downloads/yourfile.txt your_username@remotehost.edu:/some/remote/directory
rsync
それについて考えるので、同様に動作するかもしれないと思う
scp
上記で置き換えrsync
てください、それはうまく動作するはずです。
rsync
単純な場合は「機能する」だけで、他の場合ははるかに効率的であるため、単一のファイルでもすべてに使用する傾向があります。いずれかを使用している場合scp
か、rsync
何もない既に圧縮および/または暗号化された上で、(上の圧縮オプション有効にすることを忘れない-C
ためにscp
、-z
または--compress
のためにrsync
)。実際、私は習慣でそれをオンにします-それが物事を遅くする状況を見つけることは非常にまれです(おそらく、rPiのような限られたCPI電力で遅い低電力デバイスを使用している場合)。
これにscp
は明らかに適切なツールですが、何らかの理由で使用できない場合は、ローカルマシンから次のような操作を行って、たとえばディレクトリ構造をリモートマシンにコピーできます。
tar -c . | ssh <remote> tar -x
この意志tar
という現在のローカルマシン上のディレクトリ、および書き込みtar
にstdout
どの、その後にパイプされますssh
、それはそれから読み取り、ファイルをuntarするために、リモートコマンドを実行するコマンドstdin
-f -
作成と抽出の両方の終了時のデフォルトであるというDietrich Eppのコメントを反映するように編集されたため、明示的に指定する必要はありません。
-C basedir
引数を追加するtar
必要があります。
まれにこれを行いたい場合、sshfs
FUSE(Linux、* BSD、Mac OS X)をサポートするUnixライクを使用している場合は、リモートファイルシステムをマウントすることをお勧めします。〜/ remote-serverという名前のホームディレクトリの下にディレクトリを作成します。
$ mkdir ~/remote-server
次に、でリモートファイルシステムをマウントしますsshfs
。「yourserver.com」をリモートマシンのホスト名に、「リモートディレクトリの名前」をリモートシステムで使用しているディレクトリに置き換えます。
$ sudo sshfs username@yourserver.com:/name/of/remote/directory ~/remote-server/
これが完了すると、リモートディレクトリはファイルシステムの一部となり、次のような通常のツールをすべて使用できますcp
。
$ cp ~/Downloads/your-files ~/remote-server
あなたが既に持っていない場合はsshfs
インストールされ、あなたは(という名前のパッケージを探して、あなたのパッケージマネージャを使用してコンピュータにインストールすることができる必要がありますsshfs
かfuse-sshfs
)。詳細については、オンラインでチュートリアルを読むことができます。
ところで、これはリモートサーバー上のファイルを管理する私のお気に入りの方法です。通常、この方法で1つの運用サーバーと2つの開発サーバーをマウントしたままにして、通常のファイルブラウジングワークフローを使用します。
-o idmap={none,user,file},gid=<remote_user_group_ID>,allow_other
し、-C
乏しい帯域幅場合は圧縮のために。うまく機能したらすぐに、コマンドのエイリアスを個人的に追加して、sshを介して遠くのファイルシステムをすばやくマウントします。@Benjamin_Staton少なくとも適切なユーザー/グループマッピングがなければ、ここではsudoまたはrootを使用しません。
最初に、scp
(コピーオーバーssh
)との間に実際の違いはありませんrsync
。
後続の実行では、rsyncが既に存在するファイルをコピーしないため、メリットがあります。
rsync -avH ~/Downloads username@remotehost:Downloads
-a
すべてのファイル-v
冗長な-H
「シンボリックリンクを見つけて正しいことをするだけ」他の有用なフラグは次のとおりです。
--delete
コピー元に存在しなくなったコピー先のファイルを削除します。--dry-run
テスト用-と組み合わせると非常に便利--delete
です。ssh
パスワードを設定している場合は、これもキーを使用してパスワードなしのログインを実行します。
実行の最後にrsync
、プレーンコピーを再度実行した場合の速度が何倍速かを示します。
-H
実際にはハードリンク用であり、ソースディレクトリ構造内の複数の場所にリンクされると、同じコンテンツが2回以上送信されるのを停止します(ただし、大きなディレクトリ構造ではプロセスの効率が低下する可能性があります)。シンボリックリンクには影響しませんが、-a
/に含まれるオプションの一部は、--archive
シンボリックリンクの処理方法に影響します。
私はsshで非常に似たようなことをしています。Visual Studio用のカスタムビルドツールを作成し、基本的にVSにsshコマンドを実行させて、コードをターゲットコンピューターにコピーし、そのターゲットコンピューターでコンパイルします。
ssh userB @ hostB 'cp /network/path/of/source/file.ext /path/of/final/file.ext; ./runCustomCommand '
単一引用符とセミコロンの使用に注意してください。前者はsshを介してhostBへのコマンドをカプセル化し、後者はhostAから1つのsshコマンドで複数のhostBシステムコマンドを実行できるようにします。
これを機能させるには、起動マシンでsshキーを設定して、userA @ hostAになり、userBとしてhostBにログインできるようにする必要があります。userA @ hostAの公開sshキーを作成するプロセスは、十分に文書化されています。hostAでuserAの公開鍵を作成せず、その鍵をuserBとしてhostBにコピーしないと、毎回パスワードを入力する必要があります。これは自動化の喜びを台無しにします。
this file
)と複数のファイル(a series of software files
)を参照しています。最良の解決策は、単一のファイルを持っているか複数のファイルを持っているかによって異なります。