OSXでphpからリモートホストにrsyncを実行する
ローカルホストからリモートホストに対して,たとえばcrontabなどからrsyncを自動実行するには,そのシェルを実行するユーザのssh秘密鍵/公開鍵を用意して,リモートホスト側の ~/.ssh/Authorization_Keys に公開鍵を設置すればよいのだけど,「ローカル側のphpアプリケーションでフォームのボタンを押したら,特定のファイルを本番サーバに転送する」というような処理をしたい時は,このままではうまくいきません。phpはWebサーバの権限で動作しているので,別途「Webサーバというユーザ」のためのssh秘密鍵/公開鍵を用意して設定する必要があります。
そのへんの設定の仕方はSolarisやlinux向けにはチョコチョコWeb上に落ちているのだけど,OSXにはほとんど情報がなく,いくつかの点でハマったので,以下に備忘録をメモしておきますよ。
設定のポイント
/Library/WebServer/.ssh/を作成する
$ cd /Library/WebServer $ sudo mkdir .ssh
/Library/WebServer/.ssh のパーミッションを緩和する
そのままsudoでssh-keygenを実行すると権限不足でssh鍵を書き込めないので,一度~/.sshのパーミッションを緩める。
$ sudo chmod 777 .ssh
鍵ペアを生成する
ユーザを _www にしてid_rsaとid_rsa.pubを作成する。
$ sudo -u _www ssh-keygen -t rsa
Enter3回(=デフォルトディレクトリに生成,パスフレーズなし)で /Library/WebServer/.ssh に秘密鍵/公開鍵が生成される。
リモートホストの~/.ssh/Authorization_Keys に登録する
生成された公開鍵 id_rsa.pub の内容をリモートホスト側の~/.ssh/Authorization_Keys に追記する。当該ファイルがあれば最終行にコピペする。なければ,id_rsa.pub を転送してから Authorization_Keys にリネームすればよい。