複数のコンピュータ間でファイルを転送するとき、セキュリティの問題に直面したことはありませんか?ファイルをネットワークに放り出して、赤ずきんちゃんのように無事に届くことを祈るわけにはいきません。セキュリティ対策が必要です。不正アクセス、ネットワークの盗聴、データ漏洩、その他の脅威からデータを守るファイル転送プロトコルを使う必要があります。
Secure Copy Protocol (SCP) はネットワーク上の異なるマシン間でファイルを転送する強力なファイル転送プロトコルです。このブログ記事では、このプロトコルについてより詳しく理解し、リモートマシンからローカルマシンへの SCP の活用方法を探ります。
SCP の仕組み
SCP は SSH (Secure Shell) を使ってファイルを転送します。でもこれは一体どういう意味でしょうか。SSH はサーバーへの安全で確実なリモートアクセスのためのネットワークプロトコルです。認証、暗号化、転送データの整合性検証の機能を備えています。SCP はこれらのセキュリティ機能と SSH が提供する暗号化方式に依存して、ネットワーク上のファイルを安全に転送します。このように、SCP をリモートからローカルサーバーへ使うことで、安全な接続とファイル転送が実現でき、データの真正性と機密性を保証できます。
ファイル転送に SCP を使う、理由と方法
リモートからローカルへ SCP を使うことも、ローカルからリモートへ SCP を使うことも、効率的で柔軟なファイル転送方法です。SCP はファイル転送において大きな利点があります。例えば、SCP は FTP などの他のファイル転送方式よりも強力なセキュリティ対策を提供します。SCP が他のプロトコルと異なるもう1つの点は速度です。SCP は通常 SFTP などの他のプロトコルより大幅に高速であり、Linux マシン間のファイル転送に最適です。
SCP でファイルを移動できます。
- ローカルマシンからリモートマシンへ
- リモートマシンからローカルマシンへ
- あるリモートマシンから別のリモートマシンへ
では実際に Linux の SCP シンタックスを使ったファイル転送に進みましょう。最初に行うことは、両方のコンピュータに SSH をセットアップすることです。ただし、SSH は通常すべての Linux マシンにインストール済みであることに注意してください。その場合は、これらの手順をスキップできます。
1. SSH のセットアップ
以下のコマンドを実行して SSH をインストールしてください:
sudo apt install openssh-client
2. SSH キーの生成
クライアントデバイスは SSH 接続を確立する必要があります。クライアントとサーバー間のセキュアな接続には、秘密鍵と公開鍵が必要です。以下のコマンドで SSH キーペアを作成できます:
ssh-keygen
このコマンドを実行すると、キーペアの名前とパスフレーズ(オプション)の入力を求められることがあります。キーペアが作成されたら、公開鍵をサーバーにコピーする必要があります。
それでは SCP コマンドの基本的な形式を見てみましょう:
scp [options] [source username@IP]:/[directory/file name] [destination username@IP]:/[directory]
- [options] > この角括弧は SCP コマンドのオプションで置き換えます。後で説明します。
- [source username@IP] > この角括弧はローカルマシンのユーザー名と IP アドレスで置き換えてください。例: [email protected]
- [directory/file name] > この角括弧は送信するファイルのパスで置き換えてください。
- [destination username@IP] > この角括弧は受信側マシンのユーザー名と IP アドレスで置き換えてください。
- [directory] > この部分をリモートマシン上でのファイルの保存先パスに置き換えてください。
基本的なコマンド形式がわかったので、SCP コマンドの便利なオプションを見てみましょう:
| オプション | ユースケース |
| -C |
このオプションを使うと、ファイル転送時に SCP がファイルを圧縮します。
|
| -c <cipher> |
特定の暗号化方式を指定する場合に使用します。例: scp -c <aes128-ctr>
|
| -v |
このオプションはプロセスの段階的な進行状況を表示します。
|
| -l <limit in kilobytes> |
最大帯域幅の制限を設定できます。例えば、以下のコマンドは帯域幅を毎秒 100 kb に制限します: scp -l 100
|
| -P |
このオプションを使うと、接続先のリモートサーバーの SSH ポートを変更できます。SCP はデフォルトではポート 22 を使用します。
|
| -S <プログラム名> |
接続に使用するプログラムを指定できます。
|
| -r |
ファイルまたはディレクトリ全体を再帰的にコピーします。
|
SCP でファイルを転送する
SCP には 3 つの転送方法があることを覚えていますか? ここでは各転送方法を順に確認していきます。まず目標を定めましょう。私の Linux コンピュータのデスクトップに猫の写真があります。最初にこれをリモートサーバーに転送します。次にそれをローカルコンピュータに戻します。最後に、その写真を 2 つのリモートマシン間で転送します。

ローカルからリモートへ SCP
このコマンドはローカルコンピュータからリモートサーバーにファイルを転送します:
scp [path/to/the/file] [Username]@[IP address]:[path/to/the/location]
SCP をパスワードで使用するには、リモートサーバーのパスワードを入力する必要があります。入力すれば完了です。

リモートからローカルへ SCP
このプロセスを逆にするには、リモートサーバーのターミナルにアクセスする必要がありません。ローカルコンピュータのターミナルでこのコマンドを実行してください:
scp [username]@[IP address of the remote machine]:[path/to/the/file] [path/to/the/location]
ご覧のように、このコマンドの前後を反転させました。

2 つのリモートマシン間で SCP を使う
では、2台のリモートマシン間でファイルを転送してみましょう。このステップでは両方のリモートマシンのパスワードが必要なので、事前に用意しておいてください。リモートコンピュータ間でファイルを転送するには、次のコマンドを使用してください:
scp [username of the 1st remote machine]@[IP address of the 1st remote machine]:[path/to/the/file] [username of the 2nd remote machine]@[IP address of the 2nd remote machine]:/[path/to/location]

その他の一般的な SCP コマンド
最も一般的なscpコマンドは、リモートからローカル、ローカルからリモート、そして2つのリモートホスト間でのscpです。しかし、これだけに留まらず、他にも便利なscpの使用例を見てみましょう。
1. ディレクトリ全体を再帰的にコピーする
ディレクトリ全体とそのファイルのすべてを転送したいとします。1つ1つのファイルを転送するのは時間がかかるでしょう。代わりに、scpコマンドで複数ファイルを指定することで、ディレクトリ全体を再帰的にコピーできます:
scp -r [Path/to/directory] [username of the remote server]@[Ip address]:/[path/to/the/location]
このコマンドは多くのシナリオで活用できます:
- コードデプロイメント コードやWebアプリケーションをデプロイする際、ファイルやスクリプトといったすべてのコンポーネントを含むディレクトリ全体を転送する必要があることがあります。
- バックアップと同期: ディレクトリ全体のバックアップが必要な場合、あるいはローカルマシンとリモートサーバー上の2つのディレクトリを同期したい場合は、すべてを再帰的にコピーする必要があります。
- システム移行: システム移行における重要なタスクは、すべての重要なデータをコピーして転送することです。scpコマンドに-rオプションを使用すると、移行プロセスで何も見落とさないようにできます。
2. 帯域幅の使用量を制限する
データ転送速度を制御したい場合は、次のコマンドを使用できます:
scp -l <limit> [path/to/the/file] [Username]@[IP address]:[path/to/the/location]
なぜそうするのでしょうか?
これら2つのシナリオでは、scpコマンドを使用してバンド幅に制限を設定できます:
- ネットワーク混雑 ネットワークが過負荷の場合、scpでバンド幅を制限することでネットワークリソースの分配を改善できます。scpでバンド幅を制限すれば、他のネットワーク関連のタスクに支障が出ません。また、共有ネットワークでファイルを転送する場合、自分のプロセスが他のユーザーのネットワーク活動に悪影響を与えないようにするためにも重要です。
- バックグラウンド転送 バックアップの自動化や同期処理などのバックグラウンドscpコマンドでは、これらのタスクがネットワークリソースを大量に消費してしまう可能性があります。このような場合は、これらの転送プロセスのバンド幅を制限してリソースを適切に管理できます。
3. 詳細なログを取得する
scpコマンドで-vオプションを使用すると、転送プロセスに関する詳細な追加情報がログに記録されます。詳細なフィードバックと情報を取得するには、以下のコマンドを使用してください:
scp -v [path/to/the/file] [Username]@[IP address]:[path/to/the/location]
このコマンドを覚えて使う必要がある理由は次の通りです:
- トラブルシューティング: このオプションを使用すると、転送の進行状況がリアルタイムで表示されます。ファイルサイズや完了率などの情報が表示されます。また、エラーメッセージと警告も表示されます。これらのデータを組み合わせることで、必要に応じて転送プロセスを監視し、トラブルシューティングできます。
4. SSH ポートを指定する
scpコマンドで-Pオプションを使用すると、次のことができます: ポート番号を変更できます。変更するコマンドは以下の通りです:
scp -P [port number] [path/to/the/file] [Username]@[IP address]:[path/to/the/location]
これは以下のシナリオで役立ちます:
- ファイアウォール設定: デフォルトのポート番号が制限されている場合、またはそのサービスを潜在的な脅威から隠したい場合は、ポート番号を変更できます。
SCP の代わりになるものはあるか
scpは高速で安全です。適切なscpコマンドの構文と基本的なトラブルシューティング知識があれば、これだけで十分です。とはいえ、代替手段を確認する価値があります。
1. rsync
rsyncは高度な同期機能、差分転送、リモート・ローカル間のコピーが可能な汎用ファイル転送ツールです。送信元と送信先のファイルの差分のみを転送することでバンド幅の使用量を削減できます。rsyncの大きな利点は、中断したファイル転送を途中から再開して続行できることです。
rsync の利点
- ファイルとディレクトリの効率的な同期。
- デルタ転送アルゴリズムに対応し、データ転送量を削減します。
- 中断された転送を再開できます。
rsync の短所
- ソースと宛先の両方のシステムにrsyncがインストールされている必要があります。
- scpと比べて、より多くのセットアップとコマンドオプションが必要です。
2. SFTP (SSH ファイル転送プロトコル)
SFTPはSSH経由でファイルを安全に転送する方法を提供します。FTPと同様の機能を持ちながら、SCPと同じく暗号化されたSSH接続で動作します。ただし、いくつかの点ではSFTPの利点がSCPを上回ります。SCPはディレクトリリストの生成、ディレクトリの作成・削除などができませんが、SFTPはこれらのタスクをすべて実行できます。
SFTP プロ
- 暗号化による安全なファイル転送。
- リモートファイル管理機能。
- ほとんどのLinuxおよびUnixシステムで広く利用できます。
SFTP のデメリット
- コマンド構文と使用方法は従来のFTPと異なります。
- 組み込みシステムや特定のデバイスでのサポートが限定的な場合があります。
3. FTP (ファイル転送プロトコル)
FTPはファイル転送の広く使用されている標準プロトコルです。クライアント・サーバーモデルで動作し、基本的なファイル転送機能を提供します。
FTP プロス
- さまざまなプラットフォーム間で広くサポートされています。
- 使い慣れたコマンドラインクライアントとグラフィカルクライアントが利用できます。
FTP の欠点
- 暗号化がない、またはscpやsftpと比べてセキュリティが低い。
- 接続を確立するため、追加のファイアウォール設定が必要な場合があります。
- 平文での認証。
全体的に、SCPはSSH経由のセキュアなファイル転送を簡潔かつ確実に実現する選択肢ですが、rsync、sftp、FTPなどの代替手段は、特定の要件に応じて追加機能と柔軟性を提供するかもしれません。
では、どちらを選ぶべきでしょうか。セキュリティ、同期の必要性、使いやすさ、システムとプロトコルとの互換性などの要因を考慮してください。たとえば、ファイル転送においてセキュリティとデータ機密性が最も重要な要因である場合、FTPは適切な選択肢ではありません。
結論
SCPは、コンピュータ間のファイル転送を高速かつ安全に行うツールです。リモートからローカル、ローカルからリモート、さらには2つのリモートシステム間でファイルを転送できます。rsyncなどのSCPの代替手段も適切に機能しますが、特にセキュリティとスピードにおいて、SCPはそれらを上回ります。このブログ記事では、SCPの使用例、代替手段について説明し、よく使われるコマンドにすぐアクセスできるチートシートも提供しました。
よくあるご質問
リモートからローカルへ SCP を使うときに注意すべきセキュリティ上の懸念事項はあるか
SCPはかなり安全で信頼性の高いツールであり、使用中にセキュリティ脅威について心配する必要はありません。ただし、可能な限り追加のセキュリティ対策を講じることをお勧めします。
リモートからローカルへ SCP を使うときに発生する一般的なエラーには何があるか
リモートサーバーからローカルマシンへのファイル転送にSCPを使用する場合、ユーザーはいくつかの一般的なエラーに遭遇する可能性があります。以下はSCPリモートからローカルへの最も一般的な2つのエラーです。
- そのようなファイルまたはディレクトリはありません。このエラーは、正しいポート番号を指定していない、ファイルのパーミッション設定が正しくない、またはログイン情報が正しくない場合に発生します。
- ホストキーの検証に失敗しました。このエラーメッセージは、サーバーのアップグレードによってホストキーが変更された場合に発生します。ホストキーは、以前にそのサーバーに接続したことを示しており、ホストキー検証が失敗すると、サーバーのIDが変更されたことを示します。このエラーは、詐欺サーバーへの接続から保護しようとしています。
SCP を使ってリモートシステム間でファイルを転送するにはどうすればよいか
SCPを使ってシステム間でファイルを正常に転送するには、両方のコンピュータがSSH経由でアクセス可能である必要があります。リモートマシンのIPアドレスとパスワードも必要です。後は正しいSCPコマンドを使うだけです。
scp [username of the 1st remote machine]@[IP address of the 1st remote machine]:[path/to/the/file] [username of the 2nd remote machine]@[IP address of the 2nd remote machine]:/[path/to/location]
このコマンドを入力すると、サーバーのパスワードを求められます。その後、ファイルが転送されます。