ローカルのファイルをリモートのEC2にセキュアに同期(コピー)する場合、脆弱性のあるscpを使わずにsftpやrsyncを使ったほうがよいとされており、今後主流になっていくであろう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 同期元に存在しないファイルを同期先から削除