php の公開鍵を用いるメソッドに疑問を覚えたら、すばらしい回答があったのでメモ。 公開鍵認証の SSH をするとき、クライアントには秘密鍵だけじゃなくって、公開鍵ももってるんだって。知らなかった。
https://teratail.com/questions/86653
ローカル toRemote
scp ./a.txt configのHOST名:/tmp/
サーバ間でファイル同期を行う。
まず、ssh で他サーバにログインできることを確認
$ ssh user@ip -i to/secretKey.pem
$ rsync -aznvh -e 'ssh -i to/secretKey.pem' /path/from.txt user@ip path/from.txt
# あれ、↑の構文だめだった
$ rsync -e 'ssh -i ~/.ssh/prd.key' -nv ./test/a ec2-user@xxxx:/tmp/test
- -a 権限とかタイムスタンプとか極力そのまま移行してくれる
- -z 圧縮して転送する
- -h ファイルサイズを見やすくしてくれる
- -v 詳細を表示
- -n dry-run
- -r ディレクトリを転送したいときに指定
AmazonLinux とかで root で ssh ログイン許可がない場合、リモート先で sudo で rsync を実行できるようにすればいいっぽい。
visudo でリモート先で rsync を sudo で実行できるようにしておく visudo についてはどっかで勉強しよう
以下は ec2-user に sudo rsync の許可をする
Defaults!/usr/bin/rsync !requiretty
ec2-user ALL=(ALL) NOPASSWD: /usr/bin/rsync
次に、--rsync-path
に、sudo
をつけてあげると、リモート先でも sudo になる
以下は、ディレクトリhome/hogeuser
を/home
配下に追加する例
home/hogeuser
配下のファイルをコピーしたい場合は、home/hogeuser/
とする必要があって、送信元のスラッシュの有無によって意味合いが異なるとのこと。
送信先はスラッシュの有無は関係ないみたい。
$ sudo rsync -az -e 'ssh -i ./secretKey.pem' --rsync-path='sudo rsync' /home/hogeuser ec2-user@IP:/home