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

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

最終更新日:Apr 28, 2026

ローカルの Linux または macOS システムと ECS Linux インスタンスとの間で SSH 経由でファイルを転送するには、scp、sftp、または rsync を選択します。

転送ツールの選択

シナリオに最も適したツールを選択します。

  • scp: 迅速な単一ファイルの転送。シンプルな構文。

  • sftp: ファイルの閲覧、削除、名前の変更を行うための、FTP のような対話型セッション。

  • rsync: ディレクトリ同期、バックアップ、または多数の小さなファイル。増分アルゴリズムにより、差分のみが転送されます。

  • 不安定なネットワーク: 大容量ファイルには、 rsync または sftp のレジューム転送を使用します。

詳細な技術比較:

scp、sftp、rsync の詳細比較

機能

scp

sftp

rsync

パフォーマンス

大きなファイル: 高いパフォーマンスを発揮します。

多数の小さなファイル: 各ファイルで新たな接続オーバーヘッドが発生する可能性があるため、非効率です。

大きなファイル: 高いパフォーマンスを発揮し、パイプライン処理をサポートします。

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

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

レジューム転送

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

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

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

主な利点

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

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

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

リソース消費

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

対話型セッションは永続的な SSH 接続を維持するため、中程度のリソースを消費します。

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

操作手順

事前準備

ファイルを転送する前に、これらの確認を完了してください。

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

    インスタンスでパブリック帯域幅が有効になっている必要があります。ECS コンソールの [インスタンスリスト] ページからパブリック IP アドレスを記録してください。

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

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

    • アクション: 許可

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

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

    • ソース: セキュリティのため、ローカルのパブリック IP アドレスに設定してください。

      IP を取得するには、ローカルターミナルで curl ifconfig.me または curl ip.sb を実行します。
  3. 内部ファイアウォールの確認

    firewalld や ufw などの OS ファイアウォールによって接続がブロックされることもあります。

    1. インスタンスにログインし、ファイアウォールのステータスを確認してください。

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

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

セキュアコピープロトコル (scp) は、ローカルコンピューターとリモートホストの間でファイルとディレクトリをコピーします。

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

インスタンスにファイルまたはフォルダーをアップロードします。パスワードの入力を求められます。

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

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

例:

パブリック IP 1xx.xxx.xxx.121 のインスタンスの /home/ecs-user/ に /opt/test.txt をアップロードします:

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

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

インスタンスからファイルをダウンロードします。パスワードの入力を求められます。

注: scp は多数の小さなファイルには非効率です。転送する前に .tar.gz ファイルにアーカイブするか、rsync を使用してください。
# ローカルマシンに単一ファイルをダウンロード
scp <instance_username>@<public_ip_address>:<remote_file_path> <local_directory_path>

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

例:

パブリック IP が 1xx.xxx.xxx.121 のインスタンスから /home/ecs-user/test.txt をローカルの /opt/ ディレクトリにダウンロードします:

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

sftp を使用した対話的なファイル転送

SSH File Transfer Protocol (SFTP) は、リモートサーバー上でファイル管理を行うための対話型セッションを開始します。

インスタンスへの接続

sftp 接続を確立します。接続すると、プロンプトが sftp> に変わります。

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 は、大規模、増分、または反復的な転送に最適です。

ツールのインストール

ローカルマシンとインスタンスの両方に 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 インスタンスへのファイルとディレクトリのアップロードまたは同期

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

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

例:

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

    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 ディレクトリと同期するには:

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

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

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

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

本番環境に適用

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

    数千個の小さいファイルを含むディレクトリを転送する場合、ファイルごとに接続とメタデータのオーバーヘッドが発生するため、これらのツールのいずれを使用しても非効率です。ベストプラクティスは、転送元マシンでディレクトリをアーカイブおよび圧縮して 1 つのファイル (例: .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 コマンドが簡素化されます:

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

よくある質問

  • 特定のポートを使用してファイルを転送する方法

    • scp: ポートを指定するには、-P オプション (大文字) を使用します: scp -P <port_number> ...

    • sftp: ポートを指定するには、-P オプション (大文字) を使用します: sftp -P <port_number> ...

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

  • キーペアでインスタンスに接続する際に秘密鍵ファイルを指定する方法

    • scp: 秘密鍵ファイルを指定するには、-i オプションを使用します: scp -i <path_to_private_key> ...

    • sftp: 秘密鍵ファイルを指定するには、-oIdentityFile オプションを使用します: sftp -oIdentityFile=<path_to_private_key> ...

    • rsync: SSH の秘密鍵を指定するには、-e オプションを変更します: rsync -e "ssh -i <path_to_private_key>" ...

関連ドキュメント