SSH経由でLinuxマシン間でファイルを転送する
1. 概要
あるLinuxマシンから別のLinuxマシンにファイルを安全に転送したい場合があります。 おそらく、いくつかのファイルを本番サーバーにアップロードするか、バックアップを取りたいと思います。
この記事では、Linuxマシン間のリモート接続で最も一般的なプロトコルであるsshを介してLinuxマシン間でファイルを転送するためのさまざまなツールについて説明します。
最も人気のある2つのファイル転送ツールscpとrsync。を見ていきます。
2. 基本的なツールの使用法
2.1. 簡単な例
ファイルtext.logをローカルシステムからIPアドレス111.111.111.111のリモートLinuxサーバー上のパス/var /logにコピーするとします。 rootユーザーの資格情報を使用します。
これは、同じ基本構文を使用してscpまたはrsyncで実現できます。
scp text.log [email protected]:/var/log
rsync text.log [email protected]:/var/log
それらのバリエーションと違いを学ぶ前に、これらのコマンドの共通点を理解しましょう。
2.2. 一般的な構文
scpまたはrsyncの一般的な構文は次のとおりです。
scp/rsync [OPTION] [user@][SRC_HOST:]Source_File [user@][DEST_HOST:]Destination_file
OPTION セクションでは、コマンドラインスイッチを使用してコピー操作の動作を変更できます。 ソースと宛先の2つのパスを使用すると、コピー操作の両側でファイルへのパスと、使用するユーザーアカウントを指定できます。
上記の例では、ローカルファイルがリモートロケーション[email protected]にコピーされます。 後で説明するように、リモート形式を使用してソースまたはターゲットを記述し、これらのコマンドでサーバーへのファイルのアップロードとサーバーからのファイルのダウンロードの両方を行うことができます。
2.3. 注意すべき重要事項
ツールを使用してssh経由でファイルを転送する場合は、覚えておくべき点がいくつかあります。
- scp / rsync コマンドは、RSAキーを交換して自動ログインを設定していない場合、リモートサーバーにログインするためのユーザーパスワードを要求します
- ローカルサーバーのユーザー名やサーバーIPを提供する必要はありません
- ソース/宛先ファイルへの絶対パスまたは相対パスを指定できます。相対パスは現在の作業ディレクトリまたはリモートユーザーのホームディレクトリからの相対パスです。
2.4. ファイル名の指定
宛先パスにファイル名を指定する必要はありません。 ファイル名を指定しない場合、ソースファイルの名前が使用されます。
最初の例では、ファイルはtext.logという名前でターゲットディレクトリに作成されます。 ファイルを別の名前で保存したい場合は、宛先パスの一部としてファイル名を指定できます。
暗黙のファイル名を使用して、リモートLinuxサーバーから現在のディレクトリに元の名前でファイルをコピーできます。
scp [email protected]:/var/log/text.log .
rsync [email protected]:/var/log/text.log .
ここでは、「。」 パラメータは、現在の作業ディレクトリを表します。 必要に応じて、別のパスを提供することもできます。
scp [email protected]:/var/log/text.log /opt/path/mytextlog.log
rsync [email protected]:/var/log/text.log /opt/path/mytextlog.log
2.5. サーバー間でのコピー
これらのツールを使用して、2つのリモートサーバー間でコピーすることもできます。 たとえば、サーバー111.111.111.111からtext.logファイルをコピーしてみましょう。 rootユーザーのサーバー222.222.222.222へ:
scp [email protected]:/var/log/text.log [email protected]:/var/log
rsync [email protected]:/var/log/text.log [email protected]:/var/log
scpとrsyncの基本を理解したので、それらをさらに詳しく見ていきましょう。
3. scp (セキュアコピー)
scp はセキュアコピーの略で、ssh接続を介してファイルを転送するために使用されます。 これは生のコピーです。つまり、ソースフォルダーからデータを読み取り、宛先フォルダーに書き込むだけです。 したがって、数分以上かかることのないクイックコピーを探している場合は、scpを選択する必要があります。
大きなファイルを転送する場合は、安定したインターネット接続があることを確認する必要があります。 scpは再開できないため、大規模な転送中に接続が切断されると時間が失われる可能性があり、コピー操作全体を再開する必要があります。
3.1. インストール
ほとんどのLinuxディストリビューションには、scpがプリインストールされています。 scpがインストールされているかどうかを簡単に確認できます。
which scp
scp コマンドがすでにインストールされている場合は、そのパスが表示されます。 空の応答は、scpがインストールされていないことを意味します。
まだ持っていない場合は、 scp をインストールするには、公式パッケージリポジトリからOpenSSHクライアントパッケージをインストールする必要があります。
sudo apt-get install openssh-clients # For Debian based systems like Ubuntu
sudo yum install openssh-clients # For Red Hat based systems like CentOS and Fedora
scpを使用するためのいくつかの一般的なシナリオを見てみましょう。
3.2. 複数のファイルを転送する
複数のファイルを転送するために、スペースで区切られたファイルのリストを提供できます。
scp text.log text1.log text2.log [email protected]:/var/log
-rオプションを使用して、ディレクトリ全体を再帰的にコピーすることもできます。 たとえば、 / home / app / log / ディレクトリからすべてのファイルをコピーするには、次のようにします。
scp -r /home/app/log [email protected]:/var/log
*を使用して、特定の命名パターンに一致するファイルを送信できます。 たとえば、 text.log、text2.log、app.log、、 app2.log の4つのファイルがあり、
scp /home/app/log/app* [email protected]:/var/log
3.3. IDファイルを使用してファイルを転送する
キーベースの認証は、ほとんどのLinuxディストリビューションで推奨されています。 scp コマンドでは、-iオプションを使用してIDファイルを指定できます。
scp -i key.pem text.log [email protected]:/var/log
多くのシステム管理者は、転送のたびにユーザー資格情報を必要としないため、キーベースの認証を使用してファイルを転送します。
3.4. オンザフライ圧縮
-Cオプションでオンザフライ圧縮を使用することにより、転送時間を短縮できます。 これにより、ソースパスと宛先パスでそれぞれファイルが圧縮および解凍されます。
scp -C text.log [email protected]:/var/log
3.5. 転送中の帯域幅を制限する
-lオプションを使用して、帯域幅をKbit/sで指定できます。
scp -l 500 text.log [email protected]:/var/log
3.6. デバッグ用の詳細モード
-vオプションを使用して冗長モードを有効にできます。
scp -v text.log [email protected]:/var/log
出力は次のようになります。
Executing: program /usr/bin/ssh host prod-reporting-b, user jain, command scp -v -t /tmp
OpenSSH_7.9p1, LibreSSL 2.7.3
debug1: Reading configuration data /etc/ssh/ssh_config
debug1: /etc/ssh/ssh_config line 48: Applying options for *
debug1: Connecting to prod-reporting-b port 22.
debug1: Connection established.
------
Transferred: sent 2856, received 2932 bytes, in 2.1 seconds
Bytes per second: sent 1366.8, received 1403.1
debug1: Exit status 0
詳細(デバッグ)出力は、scpが実行している正確なステップを出力します。これは、接続、認証、および構成の問題をデバッグするのに役立ちます。
4. rsync (リモート同期)
rsyncは高速で用途が広いです。 コピーされたデータの量と残りの量を追跡するため、ファイルの同期とスマートな転送に適しています。
転送する大きなファイルがある場合は、 rsync を使用する必要があります。ネットワーク接続に問題がある場合でも、その時点までにコピーされたデータは失われず、接続が復元されると、コピーはその点。
rsync は、同じファイルを複数回転送する必要がある場合、 scp コマンドよりも高速です。はリモート更新プロトコルを使用するため、違いだけを転送できます 2セットのファイル間。
4.1. インストール
rsync を呼び出してバージョンを表示することにより、インストールされているかどうかを確認しましょう。
rsync --version
エラーが発生した場合は、次のようにインストールできます。
sudo apt-get install rsync # For Debian based systems like Ubuntu
sudo yum install rsync # For Red Hat based systems like CentOS and Fedora
rsyncを使用できるいくつかの一般的なシナリオを見てみましょう。
4.2. ドライランを行う
rsync は非常に強力であるため、何をしようとしているのかを確認せずに使用すると危険な場合があります。 幸い、 rsyncには–dry-runオプションがあり、実際にファイルを転送せずに試運転を実行します:
rsync --dry-run text.log [email protected]:/var/log
4.3. 属性とメタデータをコピーする
rsync は、 -a オプションを提供します。このオプションは、ファイルの内容とともに、シンボリックリンク、変更時間、グループ、所有権、およびアクセス許可をコピーします。
もう1つの重要なオプションは、– h です。これは、人間が読める形式で出力を印刷します。 これは、 –dry-runオプションと一緒に実行する場合に特に役立ちます。
rsync -ah --dry-run text.log [email protected]:/var/log
4.4. ディレクトリ内の複数のファイルを転送する
複数のファイルを転送するために、スペースで区切られたファイルのリストを提供できます。
rsync text.log text1.log text2.log [email protected]:/var/log
-rオプションは、ディレクトリ内のすべてのファイルを再帰的にコピーします。
rsync -r /home/app/log [email protected]:/var/log
*演算子は、特定のパターンに一致するファイルを送信します:
rsync /home/app/log/app* [email protected]:/var/log
the –includeオプションと–excludeオプションを使用して、ディレクトリ内のファイルのリストにファイルを含めたり除外したりできます。 たとえば、「 R 」で始まるファイルを除くすべてのファイルをディレクトリから送信するには、次のようにします。
rsync --include '*' --exclude 'R*' text.log [email protected]:/urs/log
4.5. オンザフライ圧縮
-zオプションでオンザフライ圧縮を使用することにより、転送時間を短縮できます。 これにより、ソースパスと宛先パスでそれぞれファイルが圧縮および解凍されます。
rsync -z text.log [email protected]:/var/log
4.6. 転送前に宛先パスにある既存のファイルを削除する
–deleteオプションは、新しいファイルを転送する前に、宛先から既存のファイルを削除します。
rsync --delete text.log [email protected]:/var/log
4.7. 転送後にソースファイルを自動的に削除する
本番サーバーからバックアップサーバーにログのバックアップを取りたいとしましょう。 このシナリオでは、すべてのファイルをバックアップサーバーに転送した後、本番サーバーからファイルを削除することをお勧めします。
rsync サーバーは転送の完了後にソースファイルを削除するための–remove-source-filesオプションを提供します:
rsync --remove-source-files text.log [email protected]:/var/log
5. どのツールを選択しますか?
これらのツールの両方を使用して、Linuxマシン間でファイルを転送できます。 ただし、ファイルサイズが小さい場合は、 scp を検討する必要があります。これは単純なコピーツールであり、広く利用できます。 私たちの日常の使用では、 scp は、小規模な1回限りの転送に簡単に選択できます。
rsync は、ファイルサイズが大きい場合、またはより複雑で効率的な同期が必要な場合に最も役立ちます。 また、cronジョブやスクリプトなどの定期的なタスクにも適しています。
6. 結論
この記事では、scpとrsyncの2つのファイル転送ツールについて説明しました。
また、それらの違いと、どのツールが特定のユースケースに一致するかについても調べました。