ローカルのファイルをリモートの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 同期元に存在しないファイルを同期先から削除

元記事はこちら

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