ローカルの Linux または macOS システムと ECS Linux インスタンスとの間で SSH 経由でファイルを転送するには、scp、sftp、または rsync を選択します。
転送ツールの選択
シナリオに最も適したツールを選択します。
-
scp: 迅速な単一ファイルの転送。シンプルな構文。 -
sftp: ファイルの閲覧、削除、名前の変更を行うための、FTP のような対話型セッション。 -
rsync: ディレクトリ同期、バックアップ、または多数の小さなファイル。増分アルゴリズムにより、差分のみが転送されます。 -
不安定なネットワーク: 大容量ファイルには、
rsyncまたはsftpのレジューム転送を使用します。
詳細な技術比較:
操作手順
事前準備
ファイルを転送する前に、これらの確認を完了してください。
-
インスタンスのパブリック IP アドレスの取得
インスタンスでパブリック帯域幅が有効になっている必要があります。ECS コンソールの [インスタンスリスト] ページからパブリック IP アドレスを記録してください。
-
セキュリティグループルールの設定
これらのツールは SSH (デフォルトではポート 22) を使用します。セキュリティグループが、このポートでローカル IP アドレスからのインバウンド TCP トラフィックを許可していることを確認してください。
-
アクション: 許可
-
プロトコルタイプ: カスタム TCP
-
ポート範囲: 22/22 (またはカスタム SSH ポート)
-
ソース: セキュリティのため、ローカルのパブリック IP アドレスに設定してください。
IP を取得するには、ローカルターミナルで
curl ifconfig.meまたはcurl ip.sbを実行します。
-
-
内部ファイアウォールの確認
firewalldやufwなどの OS ファイアウォールによって接続がブロックされることもあります。-
インスタンスにログインし、ファイアウォールのステータスを確認してください。
-
ファイアウォールがアクティブな場合は、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> 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を省略した方が高速になる場合があります。
本番環境向けの一般的なオプション
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>" ...
-
関連ドキュメント
-
ECS インスタンスにアップロードした重要なファイルをバックアップするには、「手動でのスナップショット作成」をご参照ください。
-
Windows インスタンスにファイルをアップロードする必要がある場合は、他のファイル転送方法を使用できます。「ファイル転送方法の選択」をご参照ください。
-
Windows から Linux インスタンスにファイルを転送するには、WinSCP などのツールを使用します。「WinSCP を使用した Linux インスタンスへのファイル転送」をご参照ください。