PHP:ssh2接続しscopyでファイル送受信
2012年06月26日 08時36分
ホスティング会社のファーストサーバが顧客のデータを削除し復旧できないという大失態をやらかしてから数日が経過し、サイト復旧の速さが日頃からデータのバックアップを取っているかというリスク管理の差で出ている。
ファーストサーバ:6/20に発生した大規模障害に関するお詫びとお知らせ
http://support2.fsv.jp/info/nw20120620_01.html
被害を受けたサイト一覧
http://ict.pken.com/2012/06/first_server_list/
己がバックアップ環境を省みると趣味程度だからとサイトのDB、html共にとっていない事に気が付いた。
現時点のデータが全部消失したら間違いなく再開などしないだろう。
そんなことにならない為にもphpでssh2接続しscopyでバックアップファイルをローカルにコピーする環境を作った際の手順。
CentOSでphpのpecl:ssh2を用意するまでの手順.
pecl, phpizeを使えるようにphp-devel,php-pearをインストール。
libssh2をコンパイルできるようにopenssl-develをインストール。
libssh2をコンパイルできるようにopenssl-develをインストール。
1 |
sudo yum install -y openssl-devel php-devel php-pear |
libssh2を取得してインストール
1 2 3 4 5 6 |
wget ttp://www.libssh2.org/download/libssh2-1.4.2.tar.gz tar -xzpvf libssh2-1.4.2.tar.gz cd libssh2-1.4.2 ./configure make sudo make install |
pecl ssh2を取得してインストール
1 2 3 4 5 6 7 |
wget ttp://pecl.php.net/get/ssh2-0.11.3.tgz tar -xzpvf ssh2-0.11.3.tgz cd ssh2-0.11.3 phpize ./configure make sudo make install |
extentionに追加
1 2 |
vi /etc/php.d/ssh2.ini extension=ssh2.so |
apache再起動
1 2 |
sudo service httpd configtest sudo service httpd restart |
phpでSSH接続&scopyでファイル取得
上記でpecl:ssh2が使用できるようになったらssh2関数が使えるようになる。
下はscopyでサーバ上のバックアップファイルをローカルにコピーする例。
処理をサーバ側にしてsendすることも簡単に出来るのでmanual読んで好みのバックアップ環境を構築するのが吉。
コマンドもssh2_execで実行できるのでtarでWebサイトを固めたりDBをダンプして落とすことも可能。
1 2 3 4 5 6 7 8 9 10 11 12 |
// 接続 $con = ssh2_connect("192.168.1.xxx"); // パスワード認証 ssh2_auth_password($con, "user", "passwd"); // ファイル受信 ssh2_scp_recv($con, "/tmp/remote_file", "/tmp/local_file"); // 切断 ssh2_exec($con, "exit"); unset($con); |
参考:ssh2関数マニュアル
http://jp.php.net/manual/ja/ref.ssh2.php