Amazon Web Services 資料一覧

scpやsftpを使わずにrsyncでローカルのファイルをEC2に同期する方法

2019/08/20更新

対応バージョン: Amazon Linux 2

ローカルのファイルをリモートのEC2にセキュアに同期(コピー)する場合、脆弱性のあるscpを使わずにsftpやrsyncを使ったほうがよいとされており、今後主流になっていくであろうOpenSSH-8.0でも同様の案内がされている。
OpenSSH-8.0リリースノートより
:
Security
========
:
The scp protocol is outdated, inflexible and not readily fixed. We
recommend the use of more modern protocols like sftp and rsync for
file transfer instead.
:

そこで、rsyncを使った同期の方法を示す。

尚、同期元と同期先の環境はそれぞれ以下とする。

同期元 (Ubuntu 18.04)
$ uname -r
4.15.0-58-generic

$ ssh -V
OpenSSH_7.6p1 Ubuntu-4ubuntu0.3, OpenSSL 1.0.2n  7 Dec 2017

$ rsync --version
rsync  version 3.1.2  protocol version 31
同期先 (Amazon Linux 2)
$ uname -r
4.14.123-111.109.amzn2.x86_64

$ ssh -V
OpenSSH_7.4p1, OpenSSL 1.0.2k-fips  26 Jan 2017

$ rsync --version
rsync  version 3.1.2  protocol version 31

rsync使用方法

以下のようにする。

rsync <オプション> -e 'ssh -i <EC2キーペアの秘密鍵>' <ローカルディレクトリ> <リモートディレクトリ>

使用例)

$ rsync -av --delete -e 'ssh -i ~/.ssh/ec2.pem' ~/files/ ec2-user@1.2.3.4:files/

オプションはここでは以下を指定しているが、他にもいろいろあるので用途に応じて指定する。

-a アーカイブモード(-rlptgoDと同義)

-r(ディレクトリを再帰的に処理)

-l(シンボリックリンクをそのままコピー)

-p(ファイルのパーミッションを保持)

-t(ファイルのタイムスタンプを保持)

-g(ファイルの所有グループを保持) ※

-o(ファイルの所有ユーザを保持) ※

-D(デバイスファイル/スペシャルファイルをそのままコピー) ※

※ root権限が必要

-v 処理内容の表示
--delete 同期元に存在しないファイルを同期先から削除