SCP (セキュア コピー) コマンドは、2 つのシステム間でファイルとディレクトリを安全にコピーするための非対話型コマンドです。 SCP は暗号化と認証に SSH プロトコルを使用するため、リモート サーバー間でファイルを安全に転送できます。
読者ではありませんか?この関連するビデオ チュートリアルをご覧ください。 ビデオが表示されない場合広告ブロッカーが無効になっていることを確認してください。SCP コマンドの使用に関する優れたガイドをお探しの場合は、これ以上探す必要はありません。このチュートリアルでは、SCP コマンドの使用例を示します。これは、自信を持って SCP ユーザーになるのに役立ちます。
準備?ファイル転送を次のレベルに引き上げるために読み進めてください!
前提条件
このチュートリアルは実践的なデモンストレーションです。フォローしたい場合は、次の要件を満たしていることを確認してください。
- 同一または異なるネットワーク上でコピー元とコピー先として機能する 2 台の Linux コンピュータが必要です。このチュートリアルでは、下の表に示すように、Ubuntu 20.04 コンピューターを使用します。
コンピュータ名 | 指定 |
ubuntu1 | ソース ホスト |
ubuntu2 | 宛先ホスト |
- 2 台のコンピューターのそれぞれまたは間にファイアウォールがある場合は、ポート 22 が開いていることを確認してください。
- このチュートリアルでは、すでに SSH セッションを開いて両方のコンピューターにログオンしていることを前提としています。
SCP コマンドを使用してファイルをコピーする
あるシステムから別のシステムにファイルをコピーしたい理由はたくさんあります。おそらく、バックアップ目的で、構成ファイルを複製するか、単にファイルのコピーが必要です。理由が何であれ、SCP コマンドはあなたの味方です。
SCP コマンドの基本的な構文は次のとおりです。
scp [Option] [[email protected]]SRC_HOST:]your_file1 [[email protected]]DEST_HOST:]you_file2
場所:
Option
– cipher や limit など、使用するオプションを指定します。このチュートリアルでは、いくつかの一般的なオプションを使用します。user1
– ソース ホストのユーザー名です。SRC_HOST
– コピーのホスト名または IP アドレス ソース .your_file1
– コピーするファイルのパスと名前です。DEST_HOST
– コピーのホスト名または IP アドレス 宛先 .user2
– は、宛先ホストへのアクセス権を持つユーザー名です。your_file2
–your_file1
からコピーするファイルのパスと名前です
注:ローカル システム上の相対パスまたは絶対パスを使用して、ファイル パスを指定できます。ただし、リモート システムのファイル パスには、絶対パスのユーザー名を使用する必要があります。
基本的な構文を理解したので、SCP コマンドを使用してファイル コピーの演習を開始できます。
1. まず、backup.txt という名前の新しいファイルを作成します ubuntu1 のホーム ディレクトリ .
# Change into the home directory
cd ~
# Create a text file with content
echo "This is my backup file" > backup.txt
# Display the file content to confirm
cat backup.txt
# Show the SHA1 hash

2. 次に、backup という名前の新しいディレクトリを作成します。 ubuntu2で。このディレクトリがファイルのコピー先パスになります。
# Creat the backup directory
mkdir ~/backup && cd ~/backup
# Display the full path
pwd

3. 次に、ubuntu1 で以下の scp コマンドを実行して backup.txt をコピーします。 バックアップ ubuntu2 のディレクトリ。ユーザー名とパスを自分のものに置き換えてください。
scp backup.txt [email protected]:/home/ata/backup
ファイルを別の名前でコピーする場合は、新しいファイル名を宛先パスに追加します。例:scp backup.txt [email protected]:/home/ata/backup/backup2.txt
4. ubuntu2 に初めて接続する場合 ホスト、タイプ yes
確認プロンプトで、Enter キーを押します。
5. 次に、ubuntu2 のユーザー アカウントのパスワードを入力します。 し、Enter を押します。正しいパスワードを入力すると、ファイルのコピーが続行されます。

6. ファイルをコピーしたら、ubuntu2 に切り替えます ターミナルで次のコマンドを実行して、ディレクトリの内容を一覧表示します。
ls
backup.txt ファイルが が存在し、ファイルのコピーに成功しました。

7. 次に、コピーしたファイルの内容を表示して、ubuntu2 でファイルが破損していないことを確認します .
cat backup.txt

8. 最後に、ファイルが同一であることを確認するために、両方のマシンで各ファイルの SHA1 チェックサムを取得し、値を比較します。この手順は、ファイルの整合性が転送中に変更されなかったことを確認するための特別な手段です。
# on ubuntu1 and ubuntu2
sha1sum backup.txt

SCP コマンドによる再帰コピーの実行
前のセクションでは、SCP コマンドを使用してローカル システムからリモート システムに個々のファイルをコピーする方法を学習しました。実際のシナリオでは、サブディレクトリとファイルを含むディレクトリ全体をコピーする必要があることがよくあります。
ディレクトリ全体のコピーは通常、バックアップ シナリオに適用されます。あなたのサーバー (ubuntu1) が、ファイルが /var/www/ にある Web サーバーを実行しているとします。 ディレクトリ。以下はサンプルのフォルダ ツリー構造です。
/var/www
├── html
│ └── index.html
└── your_domain
└── index.html
SCP コマンドを使用して、フォルダー全体をリモートの宛先に簡単にバックアップできます。
ほとんどの場合、バックアップ オペレーションは、自動化スクリプトとスケジュールされたタスクまたは cron ジョブを通じて実行されます。この例は、ディレクトリ全体を手動でバックアップする方法を示しています。
1. まず、web-server-backup を作成します ubuntu2 のディレクトリ .
# Create the backup directory on ubuntu2
mkdir ~/web-server-backup
# Display the full backup directory path
realpath ~/web-server-backup

2. 次に、ubuntu1 に切り替えます。 端末に移動し、以下の SCP コマンドを実行します。 -r スイッチは再帰コピー モードを有効にします。つまり、SCP は /var/www/ 全体をコピーします。 一番上のフォルダから最後のファイルまで。
scp -r /var/www/ [email protected]:/home/ata/web-server-backup

3. ここで、両方のシステムで tree コマンドを実行して、ディレクトリ構造を比較します。 ubuntu1 の場合 、/var/www のディレクトリ ツリーを表示します . ubuntu2 では、バックアップ ディレクトリのディレクトリ ツリーが表示されます。これは /home/ata/web-server-backup です。 この例では。
# on ubuntu1
tree /var/www/
# on ubuntu2
tree /home/ata/web-server-backup

コピーするファイル拡張子のフィルタリング
ローカル システムに、拡張子の異なるファイル タイプが混在するディレクトリがあるとします。仕事の一環として、SCP コマンドを使用して、そのフォルダーからリモート コンピューターにすべてのファイルをコピーすることになっています。ディレクトリ全体をコピーする方法は既に知っています。
ただし、*.txt を含むすべてのファイルのみをコピーする必要があるという条件があります。 拡大。パニックにならない;あなたはまだ順調に進んでおり、解決策は前のセクションで既に行ったことから遠く離れていません。コピーするファイルをフィルタリングするには、ワイルドカードを使用します。
一般的なワイルドカード文字は、0 個、1 個、または複数の文字を表すアスタリスク (*) と、1 文字を表す疑問符 (?) です。
1. まず、後でコピーするサンプル フォルダーとファイルを ubuntu1 に作成します。以下のコマンドを実行して、フォルダー foo を作成します。 *.txt、*.doc、および *.ppt 拡張子を持つファイル。
# Create a directory named foo
mkdir foo && cd foo
# Create five *.txt files
touch {1..5}.txt
# Create five *.doc files
touch {1..5}.doc
# Create five *.ppt files
touch {1..5}.ppt
# List all the files in the directory

2. 次に、ubuntu2 ターミナルに切り替えて、bar というディレクトリを作成します。 .このディレクトリがコピー先のパスになります。
# Create the folder
mkdir bar
# Display the new folder's full path
realpath bar

3. ubuntu1 に切り替えます 端末に移動し、以下の SCP コマンドを実行します。今回は、ソースとして特定のフォルダーを指定する代わりに、ソースには txt を持つ任意のファイルに一致するワイルドカードが含まれていることに注意してください。 foo 内の拡張子
scp *.txt [email protected]:/home/ata/bar/
アカウントのパスワードを入力すると、コピーが続行されます。以下に示すように、SCP コマンドは txt のみをコピーしました ソースフォルダーに他のファイルタイプがあるにもかかわらず、ファイル。

4. 最後に、ubuntu2 ターミナルに切り替えて、バー 内のファイルを一覧表示します。 ディレクトリ。
ls -l bar/
結果は、ディレクトリ内に *.txt ファイルのみが存在することを確認する必要があります。

鍵ベースの認証を有効にする
宛先アカウントのパスワードを入力するのは面倒で面倒です。また、パスワードベースの認証は安全性が低く、自動化には適していません。代替手段は何ですか?キーベースの認証を有効にします。
ご存知のように、SCP コマンドは内部で SSH を使用します。また、SSH には、パスワードの代わりに SSH キーを使用して認証するオプションがあります。 SSH キー認証で SCP を設定する手順は次のとおりです。
1.ubuntu1 で 、ssh-keygen コマンドを実行して SSH 鍵ペアを生成します。
ssh-keygen -t rsa
2. Enter キーを押して、鍵を保存するデフォルトのパスを受け入れます。最後に、キーにパスフレーズを追加しないように Enter キーを 2 回押します。
以下に示すように、このコマンドは 2 つのファイルを作成しました。 id_rsa ファイルは秘密鍵であり、ソース コンピューターに残ります。逆に、id_rsa.pub を宛先ホストにコピーする必要があります。

3. 以下のコマンドを実行して、公開鍵をリモート ホスト ubuntu2 にコピーします。 .
ssh-copy-id [email protected]
プロンプトで宛先アカウントのパスワードを入力して、公開鍵のコピーを続行します。

4. SSH キー ペアを生成したので、次のコマンドを実行して backup.txt を安全にコピーします。 ubuntu1 からのファイル ubuntu2 に .引数 -i ~/.ssh/id_rsa は、SCP コマンドに SSH 鍵ファイルで認証するよう指示します。
scp -i ~/.ssh/id_rsa backup.txt [email protected]:backup3.txt
以下に示すように、SCP コマンドはパスワードの入力を求めなくなりました。

それでおしまい!厄介なパスワード プロンプトを取り除き、SSH セッションをさらに安全にしました。
結論
この記事では、SCP コマンドを使用して 2 つの Linux システム間でファイルを安全にコピーする方法を説明しました。また、認証用の SSH キーで SCP を使用する方法も学びました。 SCP コマンドについて学習したので、次にコンピューター間でファイルを一括コピーする必要があるときに試してみてください。