すべてのプロダクト
Search
ドキュメントセンター

Elastic Compute Service:scp、sftp、または rsync を使用した Linux インスタンスへのファイル転送

最終更新日:Sep 24, 2025

ローカルの Linux または macOS システムから ECS の Linux インスタンスにファイルを転送する場合、scpsftp、およびrsyncはよく利用されるコマンドラインツールです。このガイドでは、これらのツールを使い分け、効率的かつ安全にファイルを転送するためのベストプラクティスを紹介します。

転送ツールの選択

まず、シナリオに応じて最適なツールを選択します。

  • scp: 単一ファイルの迅速な転送に適しています。構文がシンプルで、習得が容易です。

  • sftp: FTP のようなインタラクティブセッションを提供し、ファイルの参照、削除、名前変更などのファイル管理が可能です。

  • rsync: ディレクトリの同期、バックアップ、または多数の小さなファイルの転送に適しています。差分アルゴリズムにより、非常に効率的です。

  • 不安定なネットワーク: 大容量ファイルを転送する場合は、rsync または sftp のレジューム機能 (転送が中断した場合、通信を再開する機能)を使用することを推奨します。

以下の表で、技術的な詳細を比較します。

scp、sftp、rsync の詳細比較

機能

scp

sftp

rsync

パフォーマンス

大容量ファイル: パフォーマンス良好。

多数の小さなファイル: ファイルごとに新しい接続を確立するため、オーバーヘッドが大きく非効率です。

大容量ファイル: パフォーマンスが良く、パイプライン処理をサポートしています。

多数の小さなファイル: scp よりも優れていますが、rsync ほど効率的ではありません。

全体的な効率が高い。後続の同期では、ファイルの差分のみを転送するため、帯域幅と時間を節約できます。

レジューム転送

サポートされていません。転送が中断された場合は、最初からやり直す必要があります。

reget (ダウンロード) と reput (アップロード) コマンドを使用して、単一ファイルの転送を再開できます。

サポートされています。--partial または --append-verify オプションを使用すると、ファイルとディレクトリの両方の転送を再開できます。

主な利点

構文がシンプルで、ほとんどのシステムにデフォルトで含まれているため、迅速な一回限りのファイル転送に最適です

lsrmmkdir などのコマンドを使用して、リモートサーバー上のファイルを管理するためのインタラクティブセッションを提供します。

増分同期。フィルタリング、削除、速度制限、圧縮などの高度なオプションをサポートしています。

リソース消費

CPU とメモリの消費量が少ないです。。

インタラクティブセッションは永続的な SSH 接続を維持するため、中程度のリソースを消費します。

ファイルの差分を比較する際、特に大量のファイルをスキャンする場合に、CPU とメモリを消費します。

手順

前提条件

ファイルを転送する前に、以下を確認してください。

  1. インスタンスのパブリック IP アドレスの取得

    ローカルコンピューターからファイルを受信するには、インスタンスにパブリック帯域幅が有効なパブリック IP アドレスを割り当てる必要があります。有効にした後、ECS コンソールの[インスタンス] ページで対象インスタンスのパブリック IP アドレスを確認・記録します。後続のすべてのコマンドでは、この IP アドレスを使用します。

  2. セキュリティグループルールの設定

    これらのツールは、デフォルトでポート 22 を使用する SSH プロトコルを介してファイルを転送します。インスタンスのセキュリティグループで、ローカル IP アドレスからのこのポートでのインバウンド TCP トラフィックが許可されていることを確認してください。

    • アクション: 許可

    • プロトコルタイプ: カスタム TCP

    • ポート範囲: 22/22 (またはカスタム SSH ポート)

    • 送信元: セキュリティのため、これをローカルのパブリック IP アドレスに設定することを推奨します。

      ローカルターミナルで curl ifconfig.me または curl ip.sb を実行することで、ご自身の IP アドレスを確認できます。
  3. インスタンスの内部ファイアウォールの確認

    インスタンスのオペレーティングシステム内のファイアウォール ( firewalldufw など) も接続をブロックする可能性があります。

    1. インスタンスにログインし、ファイアウォールのステータスを確認します。

    2. ファイアウォールがアクティブな場合は、SSH サービスまたはポート 22 が許可されていることを確認してください。特定のポートまたはサービスを開くには、お使いのオペレーティングシステムの関連ドキュメントをご参照ください。

scp を使用したファイル転送

SCP (Secure Copy Protocol) は、ローカルコンピューターとリモートホスト間でファイルやディレクトリをコピーするための簡単なコマンドです。

インスタンスへのファイル・ディレクトリのアップロード

ファイルまたはフォルダーをインスタンスにアップロードするには、ローカルターミナルから次のコマンドを実行します。コマンド実行後、パスワードの入力を求められます。

# インスタンスに単一のファイルをアップロードする
sudo scp <local_file_path> <instance_username>@<public_ip_address>:<remote_directory_path>

# ローカルディレクトリをインスタンスにアップロードする
sudo scp -r <local_directory_path> <instance_username>@<public_ip_address>:<remote_directory_path>

例:

ローカルファイル /opt/test.txt を、パブリック IP アドレスが 1xx.xxx.xxx.121 のインスタンスの /home/ecs-user/ ディレクトリにアップロードするには、次のコマンドを実行します。

sudo scp /opt/test.txt ecs-user@1xx.xxx.xxx.121:/home/ecs-user/

インスタンスからのファイル・ディレクトリのダウンロード

インスタンスからローカルコンピューターにファイルをダウンロードするには、ローカルターミナルから次のコマンドを実行します。コマンド実行後、パスワードの入力を求められます。

: scp は、多数の小さなファイルを転送する際には非効率的です。ファイルを単一の圧縮ファイル ( .tar.gz など) にアーカイブしてから転送するか、代わりに rsync を使用することを推奨します。
# ローカルコンピューターに単一のファイルをダウンロードする
sudo scp <instance_username>@<public_ip_address>:<remote_file_path> <local_directory_path>

# インスタンスからローカルコンピューターにディレクトリをダウンロードする
sudo scp -r <instance_username>@<public_ip_address>:<remote_directory_path> <local_directory_path>

例:

パブリック IP アドレスが 1xx.xxx.xxx.121 のインスタンスからファイル /home/ecs-user/test.txt をローカルの /opt/ ディレクトリにダウンロードするには、次のコマンドを実行します。

sudo scp ecs-user@1xx.xxx.xxx.121:/home/ecs-user/test.txt /opt/

sftp を使用したインタラクティブなファイル転送

SFTP (SSH File Transfer Protocol) は、リモートサーバーでの高度なファイル管理を行うためのインタラクティブセッションを開始します。

インスタンスへの接続

sftp 接続を確立するには、ローカルターミナルで次のコマンドを実行します。接続すると、ターミナルのプロンプトが sftp> に変わります。

sudo sftp <instance_username>@<public_ip_address>

一般的な SFTP インタラクティブコマンド

sftp> プロンプトでは、以下のコマンドを使用できます。

  • リモート操作: ls (リモートディレクトリの一覧表示)、cd (リモートディレクトリの変更)、pwd (リモートの現在のパスを表示)、mkdir (リモートディレクトリの作成)、rm (リモートファイルの削除)、rename (リモートファイルの名前変更)。

  • ローカル操作: lls (ローカルディレクトリの一覧表示)、lcd (ローカルディレクトリの変更)、lpwd (ローカルの現在のパスを表示)。

インスタンスへのファイル・ディレクトリ全体のアップロード

# 単一ファイルをアップロードする
sftp> put <local_file_path> <remote_directory_path>

# ディレクトリ全体をアップロードする
sftp> put -r <local_directory_path> <remote_directory_path>

例:

  • ローカルファイル /opt/test.txt をインスタンスの /home/ecs-user/ ディレクトリにアップロードする場合:

    sftp> put /opt/test.txt /home/ecs-user
  • ローカルディレクトリ /opt/test/ をインスタンスの /home/ecs-user/ ディレクトリにアップロードする場合:

    sftp> put -r /opt/test/ /home/ecs-user/

インスタンスからのファイル・ディレクトリ全体のダウンロード

# 単一ファイルをダウンロードする
sftp> get <remote_file_path> <local_directory_path>

# ディレクトリ全体をダウンロードする
sftp> get -r <remote_directory_path> <local_directory_path>

例:

  • インスタンスからファイル /home/ecs-user/test.txt をローカルの /opt ディレクトリにダウンロードする場合:

    sftp> get /home/ecs-user/test.txt /opt
  • インスタンスからディレクトリ /home/ecs-user/test/ をローカルの /opt ディレクトリにダウンロードする場合:

    sftp> get -r /home/ecs-user/test/ /opt

転送の再開

大容量ファイルの転送が中断された場合は、reput (アップロード) コマンドと reget (ダウンロード) コマンドを使用して、中断した箇所から転送を再開できます。

# アップロードを再開する
sftp> reput <local_file_path> <remote_file_path>

# ダウンロードを再開する
sftp> reget <remote_file_path> <local_file_path>
: SFTP のレジューム機能は、単一ファイルに対してのみ有効です。ディレクトリ全体の転送が中断された場合は、sftpセッションを終了し、rsync を使用して効率的に同期することを推奨します。

セッションの切断

タスクが完了したら、quitまたは byeコマンドを使用して、sftpセッションを終了します。

rsync を使用したファイル・ディレクトリの同期

rsync は、大規模、増分、または反復的な転送タスクに最適です。

ツールのインストール

ローカルコンピューターと ECS インスタンスの両方に rsync がインストールされていることを確認します。

# CentOS / Alibaba Cloud Linux の場合
sudo yum install -y rsync

# Debian / Ubuntu の場合
sudo apt-get update && sudo apt-get install -y rsync

一般的なオプション

rsync の標準的な使用方法には、多くの場合 -avz オプションが含まれます。

  • -a (アーカイブ): アーカイブモード。-rlptgoD と同等です。再帰的に同期し、権限やタイムスタンプなど、すべてのファイル属性を保持します。

  • -v (詳細): 転送プロセスの詳細情報を表示します。

  • -z (圧縮): 帯域幅を節約するために、転送中にデータを圧縮します。ただし、高帯域幅リンクでは、CPU の圧縮がボトルネックになる可能性があり、-z を省略した方が速い場合があります。

本番環境向けの一般的なオプション

  • --delete: 転送元ディレクトリに存在しないファイルを転送先から削除することにより、転送先と転送元のディレクトリを完全一致させます。

    重要

    これはリスクの高い操作です。このフラグを使用する前に、必ずコマンドが正しいことを確認してください。できれば、最初に --dry-run を付けて実行してください。

  • --exclude='PATTERN': --exclude='*.log'--exclude='node_modules/' など、指定されたパターンに一致するファイルまたはディレクトリを除外します。

  • --bwlimit=KBPS: 転送帯域幅を KB/s 単位で制限します。これにより、rsync が使用可能な帯域幅をすべて消費して他のサービスに影響を与えるのを防ぎます。

  • --dry-run または -n: 実行をシミュレートします。実際にデータを移動することなく、どのファイルが転送されるかを表示します。

    重要

    重要: --delete を含む操作を実行する前に、このオプションを使用してコマンドを確認することを推奨します。

  • --partial: レジューム転送を有効にします。転送が中断された場合、rsync は部分的に転送されたファイルを保持し、次回の実行で中断した箇所から続行できるようにします。

ECS インスタンスへのファイル・ディレクトリのアップロードまたは同期

ファイルをインスタンスにアップロードするには、ローカルコンピューターから次のコマンドを実行します。コマンド実行後、パスワードの入力を求められます。

sudo rsync -avz -e ssh <local_path> <logon_username>@<public_ip_address>:<remote_path>

例:

  • ファイル /opt/test.txt を、パブリック IP アドレスが 1xx.xxx.xxx.121 のインスタンスの /home/ecs-user ディレクトリにアップロードする場合:

    sudo rsync -avz -e ssh /opt/test.txt ecs-user@1xx.xxx.xxx.121:/home/ecs-user
  • ローカルディレクトリ /opt/test/ を、パブリック IP アドレスが 1xx.xxx.xxx.121 のインスタンスの /home/ecs-user/test ディレクトリと同期する場合

    sudo rsync -avz -e ssh /opt/test/ ecs-user@1xx.xxx.xxx.121:/home/ecs-user/test

インスタンスからのファイル・ディレクトリのダウンロードまたは同期

インスタンスからローカルコンピューターにファイルをダウンロードするには、ローカルで次のコマンドを実行します。コマンド実行後、パスワードの入力を求められます。

sudo rsync -avz -e ssh <instance_username>@<public_ip_address>:<remote_path> <local_path>

本番環境での適用

  • 多数の小さなファイルの処理: まずアーカイブしてから転送

    数千もの小さなファイルを含むディレクトリの転送は、ファイルごとの接続とメタデータのオーバーヘッドのため、どのツールを使っても非効率です。ベストプラクティスとして、まず転送元でディレクトリを単一のファイル ( .tar.gz など) に圧縮します。次にそのファイルを転送し、転送先でファイルを解凍します。

  • SSH 設定ファイルによるコマンドの簡素化

    ローカルの ~/.ssh/config ファイルで、ECS インスタンスのエイリアス (例: my-prod-server) を作成することで、接続および転送コマンドを簡略化できます。

    # ~/.ssh/config に以下を追加します
    Host my-prod-server
        HostName 118.178.x.x
        User ecs-user
        Port 22
        IdentityFile ~/.ssh/id_rsa_aliyun
        ServerAliveInterval 60

    これにより、scp コマンドと rsync コマンドが簡素化されます。

    # 元のコマンド:
    sudo scp -i ~/.ssh/id_rsa_aliyun local.txt ecs-user@118.178.x.x:/remote/
    # 新しいコマンド:
    sudo scp local.txt my-prod-server:/remote/
    
    # 元のコマンド:
    sudo rsync -avz -e "ssh -i ~/.ssh/id_rsa_aliyun" local_dir/ ecs-user@118.178.x.x:/remote_dir/
    # 新しいコマンド:
    sudo rsync -avz local_dir/ my-prod-server:/remote_dir/

よくある質問

  • 特定のポートを使用してファイルを転送するにはどうすればよいですか?

    • scp: scp -P <ポート番号> ...のように、-P オプション (大文字) を使用します。

    • sftp: sftp -P <ポート番号> ...のように、-P オプション (大文字) を使用します。

    • rsync: rsync -avz -e "ssh -p <ポート番号>" ...のように、-e オプションで SSH のポートを指定します。

  • キーペアを使用してインスタンスに接続するときに、秘密鍵ファイルを指定するにはどうすればよいですか?

    • scp: scp -i <秘密鍵ファイルのパス> ...のように、-i オプションを使用します。

    • sftp: sftp -oIdentityFile=<秘密鍵ファイルのパス> ...のように、-oIdentityFile オプションを使用します。

    • rsync: rsync -e "ssh -i <秘密鍵ファイルのパス>" ...のように、-e オプションで SSH の秘密鍵を指定します。

関連情報