SCP を使ってリモートからローカルにフォルダやファイルをコピーする

2024-08-17

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



「Windows コマンドラインからアプリケーションの終了コードを取得する方法」の日本語解説

Windows コマンドラインで実行されたアプリケーションの終了コードを取得するには、%ERRORLEVEL%環境変数を使用します。この変数は、最後に実行されたコマンドの終了コードを保持しています。コマンドの実行:コマンドプロンプトを開きます。...


シェルスクリプトでJSONを整形する:コード例解説

JSON はデータの交換フォーマットとして広く使われていますが、そのまま表示すると読みづらいことがあります。そこで、シェルスクリプトで整形して見やすくする方法をご紹介します。必要なツール:jqこのタスクには、JSONを処理するためのツールである jq が便利です。多くのLinuxディストリビューションで利用可能です。インストールされていない場合は、パッケージマネージャを使ってインストールしてください。...


C#、.NET、コマンドラインにおけるコマンドプロンプトコマンドの解説 (日本語)

コマンドプロンプトは、テキストベースのインターフェースを使用してコンピュータと対話するためのツールです。Windowsでは、通常、黒いウィンドウで表示されます。C#と.NET開発において、コマンドプロンプトは次の目的で使用されます。コンパイルと実行:コンパイル: C#コードを中間言語 (IL) に変換します。csc MyCSharpFile...


ドキュメント内の行数を数える (Linux, Bash, コマンドライン)

Linux のコマンドラインで、ドキュメント内の行数を数える方法について説明します。主に wc コマンドを使用します。wc コマンドは、単語数、文字数、行数などをカウントします。行数のみをカウントするには、-l オプションを使います。例えば、data...


Bash でコマンドの出力を変数に代入する例の詳細解説

Bash では、コマンドの実行結果を変数に格納することができます。これにより、後続の処理でその結果を利用できるようになります。コマンドの出力を変数に代入するには、以下の構文を使用します:または変数名: 代入する変数の名前です。コマンド: 実行したいコマンドです。...



shell ssh command line

バッチファイルでWindowsをシャットダウン、再起動、ログオフする方法

バッチファイルは、一連のコマンドをテキスト形式で保存したファイルです。Windowsでは、.batという拡張子を持ちます。このファイルを実行することで、コマンドプロンプト上で複数の操作を自動化できます。この記事では、バッチファイルを使ってWindowsをシャットダウン、再起動、ログオフする方法について説明します。


Bash コマンドライン引数解析の代替方法と詳細解説

Bashスクリプトでは、スクリプト実行時に渡される引数をコマンドライン引数と呼びます。これらの引数を解析し、スクリプト内で適切に処理することが重要です。最も基本的な方法は、位置引数を使うことです。スクリプトの実行時に渡された引数は、変数 $1, $2, $3, ... に順に格納されます。


Javaにおけるディレクトリ内のすべてのjarファイルをクラスパスに追加する

Javaプログラムでは、外部のライブラリやユーティリティを使用するために、それらのjarファイルをクラスパスに追加する必要があります。クラスパスとは、Java仮想マシン(JVM)がクラスファイルを探しに行く場所を指定する環境変数です。方法ディレクトリの指定:環境変数: CLASSPATH環境変数を設定し、その中にjarファイルが存在するディレクトリを追加します。コマンドライン: -cpまたは-classpathオプションを使用して、コマンドラインからjarファイルの場所を指定します。


Bashスクリプトで引数を反復処理する例を詳しく解説します

Bashスクリプトでは、引数を反復処理するために、主に以下の方法が使用されます。最も一般的な方法は、forループを使用して、引数を順に処理することです。"$@": すべての引数を配列として展開します。for arg in "$@": $@の各要素をarg変数に代入し、ループを繰り返します。


「Windows コマンドラインにおける「which」に相当する機能」の例題コードの日本語解説

LinuxやmacOSでは、コマンド「which」を使って、指定したコマンドの実行ファイルのパスを調べることができます。Windowsでは、直接的な「which」コマンドはありませんが、いくつかの方法で同様の機能を実現できます。基本的な使い方:where <command_name> 例えば、notepadコマンドのパスを調べるには、次のようにします。where notepad