rsync: ローカル Mac と リモート Linux マシン間でのディレクトリ同期方法

              · ·

ローカル (MacOS) と リモート (ArchLinux) 間で、特定のディレクトリを同期させるまでに必要な手順についてのメモ。

TL;DR

  1. ssh-keygen で 秘密鍵と公開鍵 のペアを作成
  2. ssh-copy-id ${REMOTE_USER}@${REMOTE_HOST} で公開鍵を配置
  3. ローカルとリモート双方に rsync を導入
  4. 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 -Srsync を導入します。

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

参考


おわり

comments powered by Disqus