SCP を使ってリモートからローカルにフォルダやファイルをコピーする
SCP (Secure Copy) は、SSH (Secure Shell) プロトコルを利用して、リモートホストとローカルホスト間でファイルを安全にコピーするコマンドラインツールです。
基本的な使い方
scp ユーザー名@リモートホストのIPアドレス:リモートパス ローカルパス
- ユーザー名@リモートホストのIPアドレス: リモートホストのユーザー名とIPアドレス
- リモートパス: コピー元のリモートホスト上のファイルまたはフォルダのパス
- ローカルパス: コピー先のローカルホスト上のパス
フォルダをコピーする場合
フォルダをコピーするには、-r
オプションを使用します。
scp -r ユーザー名@リモートホストのIPアドレス:リモートフォルダパス ローカルパス
- -r: 再帰的にコピーするオプション
例
scp [email protected]:/home/user1/data/file.txt /home/localuser/data/
これは、リモートホスト 192.168.1.100
のユーザー user1
のホームディレクトリ内の data
フォルダにある file.txt
ファイルを、ローカルホストの /home/localuser/data/
フォルダにコピーします。
scp -r [email protected]:/home/user1/data /home/localuser/backup/
重要なポイント
- SCP はパスワードを要求する場合があります。
- ファイルのパーミッションやタイムスタンプは保持されます。
- 大量のファイルをコピーする場合、
rsync
というツールの方が効率的な場合があります。
SCPを使ったファイルコピーのコード例解説
コマンドの構造と意味
SCPコマンドは、以下の基本的な構造で利用します。
scp ユーザー名@リモートホスト:リモートパス ローカルパス
- ユーザー名@リモートホスト: 接続先のサーバーのユーザー名とIPアドレスまたはホスト名
- リモートパス: サーバー上のコピー元のファイルまたはフォルダのパス
コード例とその解説
例1: ファイルを1つコピーする
scp [email protected]:/home/user/data/file.txt ./
- 解説:
user
というユーザーでexample.com
サーバーに接続します。- サーバーの
/home/user/data
フォルダにあるfile.txt
ファイルを、 - ローカルの現在のディレクトリ (
.
) にコピーします。
例2: フォルダごとコピーする
scp -r [email protected]:/home/user/data ./backup/
- 解説:
-r
オプションで、フォルダとその中身を再帰的にコピーします。- サーバーの
/home/user/data
フォルダを、 - ローカルの
backup
フォルダにコピーします。
重要なオプション
- -r: 再帰的にコピーする (フォルダごとコピーする際に必須)
- -p: ファイルのパーミッションやタイムスタンプを保持する
- -q: 進行状況を表示しない (静かにコピーする)
実行時の注意点
- パスワード: 初めて接続するサーバーの場合、パスワード入力を求められます。
- SSH鍵: SSH鍵を設定することで、パスワード入力を省略できます。
- ファイアウォール: サーバーのファイアウォール設定によっては、SCP通信が制限されている場合があります。
- 大容量ファイル: 大量のファイルをコピーする場合は、
rsync
コマンドの方が効率的な場合があります。
実行例
# リモートのファイル一覧を表示 (コピー前に確認する)
ssh [email protected] "ls /home/user/data"
# ファイルのコピー
scp [email protected]:/home/user/data/file.txt ./
# フォルダのコピー
scp -r [email protected]:/home/user/data ./backup/
man scp
- SSH接続の確認:
ssh [email protected]
で接続できるか確認しましょう。 - パス: パスは正確に指定してください。特に、ホームディレクトリを表す
~
や、カレントディレクトリを表す.
などに注意しましょう。 - エラー: エラーが発生した場合は、エラーメッセージをよく読み、原因を特定しましょう。
応用
- スクリプト化: SCPコマンドをスクリプトに組み込むことで、自動化できます。
- cron: cronを使って定期的にファイルをコピーするような設定も可能です。
ご自身の環境に合わせて、これらの情報を活用して、効率的なファイル転送を行ってください。
- シェル: SCPコマンドは、Bashなどのシェル上で実行するコマンドラインツールです。
- SSH: SCPはSSHプロトコルを利用するため、SSH接続が確立されている必要があります。
[関連キーワード] SCP, SSH, リモートコピー, ファイル転送, コマンドライン, シェル, サーバー, クライアント
[関連技術] rsync, SFTP
SCP以外のリモートからローカルへのファイルコピー方法
SCPは、リモートとローカル間でファイルを転送する一般的な方法ですが、他にも様々な方法が存在します。それぞれの方法には特徴やメリット・デメリットがあります。
SFTP (SSH File Transfer Protocol)
- 特徴: SSHのセキュアな接続を利用したファイル転送プロトコル。SCPと同様に安全な転送が可能。
- メリット: SCPと同様の機能を持ちながら、より高度なファイル操作(ディレクトリの作成、削除など)が可能。
- デメリット: SCPと比較して設定が複雑になる場合がある。
- 利用方法: ファイル転送クライアント(FileZillaなど)や、コマンドラインツール(sftpコマンド)を利用。
rsync
- 特徴: ファイルの差分のみを転送することで、大容量ファイルの転送を高速化できる。
- メリット: 部分的な更新やバックアップに適している。
- デメリット: SCPよりも複雑なオプションがある。
- 利用方法: コマンドラインツール(rsyncコマンド)を利用。
- 特徴: 従来から広く利用されているファイル転送プロトコル。
- メリット: シンプルな設定で利用できる。
- デメリット: 平文での通信のため、セキュリティが低い。
HTTP/HTTPS
- 特徴: Webサーバーを利用したファイル転送。
- メリット: Webブラウザから直接アクセスできる。
- デメリット: ファイルサイズが大きい場合、転送に時間がかかる場合がある。
- 利用方法: Webサーバー(Apache, Nginxなど)にファイルをアップロードし、ブラウザからダウンロード。
クラウドストレージ
- 特徴: Google Drive, Dropboxなどのクラウドストレージサービスを利用。
- メリット: 複数のデバイスからアクセスできる。
- デメリット: インターネット接続が必要。
- 利用方法: 各サービスのクライアントアプリまたはWebインターフェースを利用。
プログラミング言語のライブラリ
- 特徴: Pythonの
scp
,paramiko
,requests
, Rubyのnet/scp
,net/ftp
など、様々なプログラミング言語でファイル転送機能を提供するライブラリがある。 - メリット: スクリプトで自動化できる。
- デメリット: プログラミングスキルが必要。
- 利用方法: 各ライブラリのドキュメントを参照。
どの方法を選ぶべきか?
- セキュリティ: 安全性を重視する場合は、SFTPやSSHを利用したSCPがおすすめ。
- 速度: 大量のファイルを転送する場合は、rsyncが高速。
- 手軽さ: シンプルなファイル転送であれば、FTPやクラウドストレージが便利。
- 自動化: スクリプトで制御したい場合は、プログラミング言語のライブラリが有効。
SCPは汎用性が高く、多くの場合で利用できますが、状況に応じて最適な方法を選ぶことが重要です。
- ファイルサイズ: 小さいファイルならSCP、大きいファイルならrsync
- セキュリティ: 機密性の高いファイルならSFTP
- 手軽さ: 手軽に利用したいならFTPやクラウドストレージ
選択のポイント
- 転送するファイルの種類とサイズ
- セキュリティの要件
- 操作の複雑さ
- 自動化の必要性
shell ssh command-line