リモートサーバへローカルの内容を同期させる - PHP~詳細
ちこっとだけ解説。
今回の行いたいことはリモートサーバへローカルのファイルを全コンテンツ同期させる事。
これを実現するには、
- サーバ側へのSSH接続をパスワードがない方式にする。このときサーバへは、決められたユーザだけがNOPASSWORDを許されるものとする。
- PHPのサーバ権限は(nobody,apache,www...etc)なのでこれを利用することにする。(PHPのWEBアクセスでは、sudoが使えないため・・・)
- シェルのログインユーザで生成された公開鍵など、.sshフォルダをapacheでも使えるようにコピーと移動を行う。(ドキュメントルートへは置かない。)この時.sshフォルダのコピーはログインユーザがするので、オーナーとグループの権限をPHPのサーバ権限のものと一緒にする。
この時、ディレクトリ・ファイルのパーミッションは、0600にしておくことが大事です。 - PHPではクエリをとらず、(クエリをとっても安全のためプログラムとして走らせる部分には使わない。)シェルプログラム単体で動かす。
- 記述)
rsync -avz --delete --exclude='除外するファイルまたはディレクトリ' -e "ssh -i /var/DocumentRoot/hoge/.ssh/" /var/DocumentRoot/ remoteuser@remoteserver:/var/www/hoge/
で、コマンドラインからリモートサーバへ同期するかテスト。
成功するはずです。
成功せずにパスワードを聞かれてします。またはPermissionDeniedが表示される場合は、sshの公開鍵のあるフォルダのowner,group,パーミッションを確認。このフォルダは、ユーザしか使えないようにしておくのを気を使いながら設定します。
Permissionは、0600かな。
自分だけ読み書きできると・・・・
- 以上が主な流れ。次に実際PHPコードを書くことになります。
- PHPでは、基本的にクエリは受け付けずに書いていくことにします。(セキュリティ上念のため)
<?
$cmd = 'rsync -avz --delete --exclude='除外するファイルまたはディレクトリ' -e "ssh -i /var/DocumentRoot/hoge/.ssh/" /var/DocumentRoot/ remoteuser@remoteserver:/var/DocumentRoot/';
shell_exec($cmd);
?>
のような形で記述すれば、動くはずです。
カテゴリ
職人肌トラックバック(0)
このブログ記事を参照しているブログ一覧: リモートサーバへローカルの内容を同期させる - PHP~詳細
このブログ記事に対するトラックバックURL: http://www.syokunin-hada.org/mt-tb.cgi/1

コメントする