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はあまり使ったことがないので、割りと雑な対処ですがこれでなんとか同期ができました。