Windows で Rsync クライアント
〜 Windows でも効率的なファイル転送 〜

2016-08-24 作成 福島
2016-08-26 更新 福島
2020-05-21 更新 福島
TOP > tips > cwRsync
0. このドキュメントでの制限
cwRsync は Windows で動作する Rsync です。
Rsync はローカルバックアップもできますが、ここでは ssh を使用してリモートバックアップを行います。

cwRsync のリモートバックアップで ssh を使用すると、
/home/Who/.ssh/    (← C:\cwRsync_5.5.0_x86_Free\home\Who\.ssh\ のことです)
というフォルダーを強制的に作成しようとして Who が存在しないためにエラーを引き起こします。

※このエラーを回避するため、ここではコマンド mklink を使用してシンボリックリンク (ジャンクション) を作成します。
シンボリックリンクやジャンクションは、Windows Vista 以降の機能なので、それ以前の Windows では動作しません。
(現時点で WindowsXp を使っている人はいないと思いますが)
※ ssh で通信を行うため、サーバー側に sshd が動作している必要があります。
プロトコル rsync:// は使用しません。
1. cwRsync をインストール
1-1. itefix.net から cwRsync Free バージョン (zip ファイル) をダウンロード
Free 版は有償版と比較して、以下の制限があります。
有償版の機能備考
Rsync サーバ機能なし-
パッチなし有償版には下記の機能がある
・ファイル名変換機能
・転送時間制限機能
・ファイル名の大文字小文字同一視機能
・パスワードファイルのパーミッション無視機能
クライアント用 GUI インターフェイスなし-
サポートなし-
アップグレード機能なしフリー版は手動でダウンロード&設置
64bit 版なしフリー版は 32bit 版のみ
パッケージ選択機能なしフリー版にはインストーラが存在しない

今回ダウンロードしたのは cwRsync_5.5.0_x86_Free.zip でした。
1-2. Free バージョンをインストール
インストールと言っても、フリー版にはインストーラが存在しないため、zip ファイルを任意の場所に解凍するだけ。

今回は
C:\cwRsync_5.5.0_x86_Free\
として展開しました。
1-3. 環境変数を設定
[スタート(右クリック)] - [システム] - [システムの詳細設定] を選択すると「システムのプロパティ」ウィンドウの「詳細設定」タブが選択されて表示されるので、[環境設定(N)...] ボタンをクリックする。

「環境変数」ウィンドウが表示されるので、「*** のユーザー環境変数」の [新規(N)...] ボタンをクリックする。

「新しいユーザー変数」ウィンドウが開くので、下記項目を記入し、[OK] ボタンをクリックする。

変数名備考
PATHC:\cwRsync_5.5.0_x86_Free\bin「cwRsync の展開先ディレクトリ + bin」を PATH に追加する
1-4. 動作確認
適当なディレクトリへ移動して、下記コマンドを実行してみる。
■コマンド プロンプト  
Microsoft Windows [Version 10.0.10586]
(c) 2015 Microsoft Corporation. All rights reserved.

C:\tmp>ssh
usage: ssh [-1246AaCfGgKkMNnqsTtVvXxYy] [-b bind_address] [-c cipher_spec]
           [-D [bind_address:]port] [-E log_file] [-e escape_char]
           [-F configfile] [-I pkcs11] [-i identity_file]
           [-L address] [-l login_name] [-m mac_spec]
           [-O ctl_cmd] [-o option] [-p port]
           [-Q cipher | cipher-auth | mac | kex | key]
           [-R address] [-S ctl_path] [-W host:port]
           [-w local_tun[:remote_tun]] [user@]hostname [command]

C:\tmp>ssh-keygen
Generating public/private rsa key pair.
Enter file in which to save the key (/home/Who/.ssh/id_rsa): [Enter]
Enter passphrase (empty for no passphrase): ^C (これ以上進むと鍵ファイルが作成されてしまうので中断する)

C:\tmp>rsync --version
rsync  version 3.1.2  protocol version 31
Copyright (C) 1996-2015 by Andrew Tridgell, Wayne Davison, and others.
Web site: http://rsync.samba.org/
Capabilities:
    64-bit files, 64-bit inums, 32-bit timestamps, 64-bit long ints,
    socketpairs, hardlinks, symlinks, IPv6, batchfiles, inplace,
    append, ACLs, no xattrs, iconv, symtimes, prealloc

rsync comes with ABSOLUTELY NO WARRANTY.  This is free software, and you
are welcome to redistribute it under certain conditions.  See the GNU
General Public Licence for details.

C:\tmp>exit
1-5. ワークディレクトリの設定
cwRsync は意地でもディレクトリ /home/Who/.ssh/ を作ろうとするので、シンボリック機能を使用して
/home/Who/ を C:\Users\Who/ として扱うことにする。

※ ssh-keygen, ssh で必要な鍵ファイルはオプションで指定できるが、それでもなお /home/Who/ を作成しようとしてエラーを表示する。
※ C:\cwRsync_5.5.0_x86_Free\home\Who\ というディレクトリを作成しても良いが、それだとユーザーファイルが二重管理になってしまう。

「コマンドプロンプト」を管理者として実行
コマンド mklink /D の実行は管理者権限が必要。

管理者: コマンド プロンプト  
Microsoft Windows [Version 10.0.10586]
(c) 2015 Microsoft Corporation. All rights reserved.

C:\tmp>cd C:\cwRsync_5.5.0_x86_Free\

C:\cwRsync_5.5.0_x86_Free\>mklink /D home C:\Users\
home <<===>> C:\Users\ のシンボリック リンクが作成されました

C:\cwRsync_5.5.0_x86_Free\>exit
2. パスワードなしログインの準備
2-1. 同期宛サーバに cwRsync 用のアカウントを作成し、パスワードを設定する。
$ su
# useradd Who
# passwd Who
# exit
$ exit

※ここでは同期宛サーバとして 192.168.1.111 (CentOS7) を想定しています。
2-2. 同期宛サーバに cwRsync 付属の ssh.exe でログインできることを確認する。
■コマンド プロンプト  
Microsoft Windows [Version 10.0.10586]
(c) 2015 Microsoft Corporation. All rights reserved.

C:\tmp>ssh Who@192.168.1.111
password: ***** (上記 2-1 で設定したパスワード)

$ exit
2-3. 秘密鍵と公開鍵の作成
■コマンド プロンプト  
Microsoft Windows [Version 10.0.10586]
(c) 2015 Microsoft Corporation. All rights reserved.

C:\tmp>ssh-keygen -t rsa
Generating public/private rsa key pair.
Enter file in which to save the key (/home/Who/.ssh/id_rsa): [Enter]
Enter passphrase (empty for no passphrase): [Enter] (パスフレーズは入力しない)
Enter same passphrase again: [Enter]
Your identification has been saved in /home/Who/.ssh/id_rsa.
Your public key has been saved in /home/Who/.ssh/id_rsa.pub.
The key fingerpring is:
SHA256:xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx Who@host-name

The key's randomart image is:
+---[RSA 2048]----+
|xxxxx            |
|        xxxxx    |
|xx            xxx|
|    xxxxx        |
|            xxxxx|
|      xxxxx      |
|          xxxxx  |
|xxx             x|
|  xxxxx          |
+----[SHA256]-----+

C:\tmp>dir C:\Users\Who\.ssh\id_rsa
 ドライブ C のボリューム ラベルがありません。
 ボリューム シリアル番号は 4813-719E です

 c:\Users\Who\.ssh のディレクトリ

20xx/xx/xx  19:54             1,675 id_rsa
               1 個のファイル               1,675 バイト
               0 個のディレクトリ  83,984,863,232 バイトの空き領域

C:\tmp>dir C:\Users\Who\.ssh\id_rsa.pub
 ドライブ C のボリューム ラベルがありません。
 ボリューム シリアル番号は 4813-719E です

 c:\Users\Who\.ssh のディレクトリ

20xx/xx/xx  13:46               402 id_rsa.pub
               1 個のファイル                 402 バイト
               0 個のディレクトリ  83,984,863,232 バイトの空き領域

C:\tmp>exit
2-4. 公開鍵を同期宛サーバへ登録
上記 2-3 で作成したファイルの一つ「id_rsa.pub」の内容を、同期宛サーバの .ssh/authorized_keys ファイルに追記する。
authorized_keys ファイルが存在しなければ、新規作成する。(パーミッションは 600 すること)
C:\Users\Who\.ssh\id_rsa.pub  ⇒ 追記  Who@192.168.1.111:/home/Who/.ssh/authorized_keys
id_rsa.pub の転送ツールは cwRsync に用意されていないため、転送方法は任意。
ここでは、以下の手順により追記する。
2-4-1. メモ帳で C:\Users\Who\.ssh\id_rsa.pub を開く。

2-4-2. Teraterm で Who@192.168.1.111 へログインする。

2-4-3. 2-4-1 で開いた id_rsa.pub をクリップボードにコピーする。

2-4-4. Teraterm で下記を実行する。
/home/Who$ mkdir .ssh
/home/Who$ cat >> .ssh/authorized_keys
(プロンプト待ちになるので、上記 2-4-3 でコピーした内容を張り付ける)
^D
/home/Who$ chmod 600 .ssh/authorized_keys
2-4-5. Teraterm を終了する。

2-4-6. メモ帳を終了する。
2-5. 秘密鍵の保護
2-3 で作成した秘密鍵は、(Windows の) 他ユーザから閲覧可能だと cwRsync の ssh が動作しないため、他ユーザからのアクセスを遮断する。

id_rsa を右クリック - プロパティ - セキュリティ タブ
[編集] ボタンをクリックし、読み取り/書き込み権限をすべて外す。

※他ユーザからのアクセスを遮断しないと Load key "/home/Who/.ssh/id_rsa": bad permissions のエラー表示となる
2-6. パスワードなしでログインできることを確認する。
■コマンド プロンプト  
Microsoft Windows [Version 10.0.10586]
(c) 2015 Microsoft Corporation. All rights reserved.

C:\tmp>ssh Who@192.168.1.111
password: (上記 2-2 ではパスワードが必要だったが、入力不要になる)

$ exit
2-7. 同期宛サーバのパスワードを無効にする。(ユーザ root で実行)
※ .shosts を使用しない場合、passwd -l を実施するとログインできなくなります。

$ su
# passwd -l Who
# exit
$ exit


※公開鍵でログインできるようになったので、パスワードログイン用のパスワードは不要になる
※再度パスワードログインが必要になった場合は passwd -u Who を実行して戻すことができる
3. ファイル転送
3-1. ファイル転送例(1)
cwRsync (Windows) の C:\Users\Who\.ssh\id_rsa.pub → 同期宛サーバの /home/Who/ へコピーする場合

■コマンド プロンプト  
Microsoft Windows [Version 10.0.10586]
(c) 2015 Microsoft Corporation. All rights reserved.

C:\tmp>rsync -v -e ssh '/cygdrive/c/Users/Who/.ssh/id_rsa.pub' 'Who@192.168.1.111:/home/Who/'

C:\tmp>exit

※オプション -v は対象ファイル (コピーの是非は問わない) を表示する指定。
※ cwRsync は cygwin の機能を使用しているため、Windows の C: ドライブは /cygdriver/c/ として指定する必要があります。
3-2. ファイル転送例(2)
同期宛サーバの /etc/centos-release → cwRsync (Windows) の C:\Users\Who\ へコピーする場合

■コマンド プロンプト  
Microsoft Windows [Version 10.0.10586]
(c) 2015 Microsoft Corporation. All rights reserved.

C:\tmp>rsync -v -e ssh 'Who@192.168.1.111:/etc/centos-release' '/cygdriver/c/Users/Who/'

C:\tmp>exit
3-3. ファイル転送例(3)
同期宛サーバの /var/log/httpd/access_log* → cwRsync (Windows) の C:\Users\Who\ へコピーする場合

■コマンド プロンプト  
Microsoft Windows [Version 10.0.10586]
(c) 2015 Microsoft Corporation. All rights reserved.

C:\tmp>rsync -v -e ssh 'Who@192.168.1.111:/var/log/httpd/access_log*' '/cygdriver/c/Users/Who/'

C:\tmp>exit
4. スケジューラーへの登録
Rsync の特徴と言えば、ファイルの自動同期です。
ここまでの設定で、コマンドでのファイル転送ができるようになったので、Windows のスケジューラーにファイル転送コマンドを設定します。

Windows 7 8 8.1 10 ともに、
コントロールパネル - システムとセキュリティ - 管理ツール - タスクスケジューラ を選択
「タスク スケジューラ」画面で以下を操作する。

「タスクスケジューラ(ローカル)」をポイントする。
操作(A) - 基本タスクの作成(B)
上記 3-1 を登録する場合
名前(A)テスト転送
トリガー●毎日
○毎週
○毎月
○1回限り)
○コンピューターの起動時
○ログオン時
○特定イベントのログへの記録時
開始(S): YYYY/MM/DDhh:mm:ss□タイムゾーン間で同期
間隔(C): x 日
操作●プログラムの開始(T)
○電子メールの送信 (非推奨)(S)
○メッセージの表示 (非推奨)(M)
プログラムの開始プログラム/スクリプトC:\cwRsync_5.5.0_x86_Free\bin\rsync.exe
引数の追加 (オプション)(A):-e ssh '/cygdrive/c/Users/Who/.ssh/id_rsa.pub' 'Who@192.168.1.111:/home/Who/'
開始 (オプション)(T):(なし)
※新規作成時は、5 分毎のスケジュールを指定することはできない。
※ 5 分毎のスケジュールを指定する場合は、新規作成したタスクの「プロパティ」から変更を行うこと。