Windows で rsync (cygwin使用)

ディレクトリの同期に便利な rsync ですが、
以前は Windows でも sshd の動いているホストに対して cygwin (https://www.cygwin.com/) の rsync が使えていました。

それがいつの間にかコマンドプロンプトやバッチファイルから使えなくなっていました。

仕方がないので、いちいち cygwin terminal を開いて使っていましたが、
原因と回避策が見つかったので書いておきます。

原因は、

C:\Users\perce-neige>where ssh
C:\Windows\System32\OpenSSH\ssh.exe
C:\tools\cygwin64\bin\ssh.exe

Windows 10 にいつの間にか独自の OpenSSH が入り、その ssh.exe が優先して rsync から使われているためでした。
cygwinssh.exe とは互換性無いようです。

環境変数 PATH の中でディレクトリの順番が

PATH=...;C:\Windows\System32\OpenSSH;...;C:\tools\cygwin64\bin;...

のようになってるせいでもあります。これを変えても動くとは思いますが、それでは他に悪影響がありそうで怖い。

そこで回避策、 cygwinrsync が使用するべき ssh をオプション --rsh=/usr/bin/ssh で指定します。
rsync を使うときに

rsync -rutvhp --rsh=/usr/bin/ssh src-path/ host:/dest-path/ --progress

のようにします。

なお、この ssh に設定ファイルが必要な場合は、cygwin の ~ (ホームディレクトリ) に .ssh ディレクトリを作って入れます。
cygwin のインストール先が C:\tools\cygwin64 ならば

C:\tools\cygwin64\home\perce-neige\.ssh\

とかになるはずです。

ここに config, id_rsa か id_ed25519 等のファイルを入れます。config の書き方などは ssh config などでググってください。