リモートサーバへローカルの内容を同期させる - PHP~詳細

| | コメント(0) | トラックバック(0)
ちこっとだけ解説。 今回の行いたいことはリモートサーバへローカルのファイルを全コンテンツ同期させる事。 これを実現するには、
  • サーバ側への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

コメントする

このブログ記事について

このページは、職人肌.jpが2007年9月25日 23:29に書いたブログ記事です。

ひとつ前のブログ記事は「リモートサーバへローカルの内容を同期させる - PHP~その後」です。

最近のコンテンツはインデックスページで見られます。過去に書かれたものはアーカイブのページで見られます。

Powered by Movable Type 4.0