2つのオープンSSHシェル間でファイルをコピーする方法は?


1

2台のサーバーでSSH経由でログインし、一部のファイルを一方から他方にコピーする場合(たとえば、古いサーバーから新しいサーバーに構成する場合)、これを行う最も簡単な方法は何ですか?

回答:


3

server1で:

scp <files> server2:/dest/dir/

または、rsyncがインストールされている場合:

rsync -azvu basedir/ server2:destdir/

そうでない場合は、tarを介してパイプします。

tar cf -  -C srcdir | ssh server2 tar xf - -C dstdir

最後の2つはディレクトリツリー全体をコピーします。ディレクトリ内の最初の1つ以上のファイル。

つまり、最初のシェルツールを使用して、2番目のシェルツールに直接コピーするだけです。


ただし、ログインが必要になり(キーを使用する場合は難しくなります)、次のようなものは許可されませんsudo(まあ、パイプタールスルーSSHが可能ですか?)。しかし、より大きなデータを転送する最も実用的な方法です。
バートヴァンヒューケロム

1
それを許可します。そこに「sudo」を入れるだけです。公開鍵認証をセットアップして、パスワードなしにすることができます。
キース

2

合計サイズが大きすぎない場合は、この小さなトリックを使用できます。

  1. ソースサーバーの1つ tar -cz <filestocopy> | base64
  2. 出力をクリップボードにコピーします
  3. 移行先サーバーで、 base64 -d | tar -xzv
  4. 貼り付け、入力、Ctrl-D

これはどのように作動しますか?

  1. ファイルの圧縮tarを作成し、base64でエンコードして、プレーンテキストとしてコピーアンドペーストできるようにします。
  2. 逆を行うコマンドチェーンを設定します。base64入力をデコードし、tarを抽出します。
  3. データを貼り付けてそのチェーンにフィードし、Ctrl-Dを入力してファイルの終わりを送信します。

2

2つのオープンsshセッションで、コピーする最も速い方法は次のとおりです。

  1. netcat(nc)を使用する

    Sender/Source machine:
    tar -czf - /source/dir | nc -l 2342
    
    Receiver/Destination machine:
    nc -w 10 sourcemachine 2342 | tar -C /target/dir -xz -
    
  2. 安全性の低い暗号化でscpを使用します。通常、デフォルトはフグですが、arcfourの方がはるかに高速です。

    scp -c arcfour mogga@flinflon:/home/users/mogga /dev/null
    

私は通常、2番目のオプションを使用します(より頻繁に覚えられるからです)。


面白い。現在、EC2サーバーで作業しており、そのために追加のポートを開く必要がありますが、他のツールにもそのポートを使用できます。
バートヴァンヒューケロム

ちょうどそれをテストし、それはうまく機能します。小さなエラー:-pオプション(ソースオプション)は宛先コマンドに存在すべきではありません。
バートヴァンヒューケロム

おっと...あなたは正しい。 -p source_port Specifies the source port nc should use, subject to privilege restrictions and availability. It is an error to use this option in conjunction with the -l option.
-robertmoggach
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.