PHPでSSHを利用して複数サーバに同じものをアップロードする
同じ構成のLinuxサーバに同じファイルを置くのが大変だったので試してみました。
scpコマンドだとコピーするごとにパスワードを聞かれないようにするのに工夫が必要だったので、
固定サーバにアップするだけなら引数だけ選んでアップしたいわということで作ってみました。
構成: Limux Mint12, PHP5.3.6, pecl 1.9.4
使い方
// スクリプトの引数にファイルを入れるとアップロードを行います
// $ php [script.php] [uploadfile]
// ex.
$ php deploy.php upfile.txt
PECLからssh2ライブラリダウンロード
PHPからSSHを開いてファイルをアップロードします。
先にPHPでssh2関連のライブラリをインストール。
$ sudo apt-get install libssh2-1
$ sudo apt-get install libssh2-1-dbg
$ sudo apt-get install libssh2-1-dev
$ sudo apt-get install libssh2-php
$ sudo pecl install ssh2-beta
PHPからSSHを利用してファイルをサーバに置く
<?php
/*
* リストにあるサーバに対してSSHを開く、
* 引数に与えられたファイルを転送する
* usage: $ php deploy.php upfile.txt
*/
// アップロード先サーバ
$serveres = array(
'www.hogehoge1.com',
'www.hogehoge2.com',
'xxx.xxx.xxx.xxx'
);
$up_dir = '/var/www'; // アップロード先ディレクトリ
if ( empty($argv[1]) ) { die ("引数にファイル名を入力してください\n"); }
foreach ( $serveres as $s ) :
echo "connecting {$s}\n";
$conn = ssh2_connect($s, 22);
if (!$conn) die('Connection failed');
// ssh接続
if (!ssh2_auth_password($conn, 'user', 'password')) {
die("ログイン拒否\n");
}
if (!ssh2_scp_send($conn, $argv[1], '/var/www/nginx-default/'.$argv[1]) ) {
echo "転送失敗\n";
}
else {
echo "転送完了\n";
}
ssh2_exec($conn, 'exit');
unset($conn);
endforeach;
容量の小さいファイルはうまく動作したのですが、
30MぐらいのファイルをアップしようとするとWarningがでてアップできない現象が出ました。
どこかリミットがかかってるのかな・・・
-
前の記事
Minecraft: Elder Scrolls V Skyrim Trailer [YouTube] 2012.04.18
-
次の記事
活動ログ 2012/04/19 2012.04.19