rsync: ローカル Mac と リモート Linux マシン間でのディレクトリ同期方法
tips linux · how-to · ssh
ローカル (MacOS) と リモート (ArchLinux) 間で、特定のディレクトリを同期させるまでに必要な手順についてのメモ。
TL;DR
ssh-keygen
で 秘密鍵と公開鍵 のペアを作成ssh-copy-id ${REMOTE_USER}@${REMOTE_HOST}
で公開鍵を配置- ローカルとリモート双方に
rsync
を導入 rsync SRC... [DEST]
で同期完了
SSH 公開鍵 を使った リモートへのログイン設定
まずは、公開鍵と秘密鍵のペアを作成&リモートへ配置して パスワードなしで SSH 接続できるようにしてゆきます。
SSH 鍵の生成
ssh-keygen
コマンドを実行して SSH キーペア を作成します。
micheam@m1-macbook-air $ ssh-keygen
途中、キーファイル名 と 格納場所 を聞かれましたが、 とくに理由がないしデフォルトで良いでしょう。
Enter file in which to save the key (/Users/micheam/.ssh/id_rsa):
パスフレーズを指定せよ。と言われるので、 任意のパスワードを指定しましょう。
Enter passphrase (empty for no passphrase):
これで 秘密鍵 id_rsa と 公開鍵 id_rsa.pub が生成されました。
Your identification has been saved in /Users/micheam/.ssh/id_rsa. Your public key has been saved in /Users/micheam/.ssh/id_rsa.pub.
公開鍵 を リモートサーバ へ配布
続いて、 ssh-copy-id
コマンドを使用して 公開鍵 をリモートサーバへ適用して行きます。
ssh-copy-id $REMOTE_USER_NAME@$REMOTE_HOST
例えば、私の場合は micheam@arch-x220
に対して鍵を適用したいのため、以下のような感じになります。
micheam@m1-macbook-air $ ssh-copy-id micheam@arch-x220
処理が成功すると、以下の通り ssh で試して見るようにメッセージが出るので、 試してみましょう。
Now try logging into the machine, with: “ssh ‘micheam@arch-x220’” and check to make sure that only the key(s) you wanted were added.
# さっそく ssh してみると?
micheam@m1-macbook-air $ ssh micheam@arch-x220
Last login: Thu Feb 4 21:49:21 2021 from 192.168.11.21
Agent pid 1346
micheam@arch-x220:~ $
micheam@arch-x220:~ $ uname -a
Linux arch-x220 5.9.14-arch1-1 #1 SMP PREEMPT Sat, 12 Dec 2020 14:37:12 +0000 x86_64 GNU/Linux
リモートへのSSH接続が可能になりました ㊗
リモート側 にも rsync を導入
ここで徐に rsync -r
を叩いてみたところで、以下のエラーに遭遇します。
bash: rsync: command not found rsync: connection unexpectedly closed (0 bytes received so far) [sender]
command not found ってどういうこっちゃねん🤔ということでGoogle検索してみると、 同様の質問を発見。
You local rsync needs to start a remote rsync from the SSH on the remote server but is unable to find it since it’s probably not in its path.
ということで、リモート側で確認してみると?
micheam@arch-x220 $ ssh arch-x220 type rsync
bash: line 0: type: rsync: not found
はい。リモートに rsync が導入されていませんでした 😅
今回は リモート が archlinux なので、 pacman -S
で rsync
を導入します。
micheam@m1-macbook-air $ ssh arch-x220
micheam@arch-x220 $ sudo pacman -S rsync
[sudo] password for micheam:
resolving dependencies...
looking for conflicting packages...
...
micheam@arch-x220 $ $ type rsync
rsync is /usr/bin/rsync
同期開始
これでやっと rsync できるはず 😄
# 例えば、 リモートの $HOME/work を ローカル $HOME/work 同期
micheam@m1-macbook-air $ rsync -Pr arch-x220:/home/micheam/work $HOME/
receiving file list ...
38 files to consider
work/helloworld/
...
sent 670 bytes received 400726 bytes 267597.33 bytes/sec
total size is 398394 speedup is 0.99
できました!!やったね!
ちなみに、 rsync
には -n, --dry-run
が用意されているので、事前にどんなファイルが同期対象になるのか、
確認してから実行しましょうね。rsync
の使い方自体は、 man rsync
をどうぞ。
# -n, --dry-run で事前に確認してみる
micheam@m1-macbook-air $ rsync -Pr -n arch-x220:/home/micheam/work $HOME/
receiving file list ...
38 files to consider
work/
work/helloworld/
work/helloworld/ocaml+dune/
work/helloworld/ocaml+dune/.merlin
work/helloworld/ocaml+dune/dune
work/helloworld/ocaml+dune/dune-project
work/helloworld/ocaml+dune/helloworld.ml
work/helloworld/ocaml+dune/_build/
...
sent 244 bytes received 1186 bytes 953.33 bytes/sec
total size is 398394 speedup is 278.60
参考
- How to Use SSH Public Key Authentication - ServerPilot Docs
- 新しい SSH キーを生成して ssh-agent に追加する - GitHub Docs
おわり
comments powered by Disqus