rsyncでpermission denied (publickey) となった時の対処法

rsyncでローカル環境とリモートサーバーのディレクトリを同期したい!

ということありますよね。そう思い、rsyncを使ってみたらつまずいた時の対処法です。

エラーの内容と原因

ローカル環境の現在のディレクトリと、リモートサーバーの/home/wwwを同期しよう思い、実行したのが以下のコマンド。

$ rsync --delete -avzc ./* www@11.22.33.444:/home/www
 Permission denied (publickey).
 rsync: connection unexpectedly closed (0 bytes received so far) [sender]
 rsync error: unexplained error (code 255)

見事にPermission deniedされてますね。

もちろん、~/.ssh/configには以下のように設定を追記済みで、ssh remoteで接続できることも確認済です。

Host remote
  HostName 11.22.33.444
  User www
  Port 22
  IdentityFile ~/.ssh/id_rsa

rsyncのエラー解決策

rsyncは、裏側でsshをデフォルトでは使っているそうです。そこで、rsyncのeオプションを使い秘密鍵を指定してssh接続をしてみたいと思います。

eオプションを使いダブルクオーテーションで囲むことでsshのiオプションを使うことができます。

-e "ssh -i /Users/sample_user/.ssh/id_rsa"

コマンド全体としては↓のような感じになります。

$rsync --delete -avzc -e "ssh -i /Users/sample_user/.ssh/id_rsa"  ./* www@11.22.33.444:/home/www

これで実行したところ…できた!

秘密鍵がちゃんと指定できなかったことが問題だったようです。rsyncはあまり使ったことがないので、割りと雑な対処ですがこれでなんとか同期ができました。