php がリモートでファイルをコピーし、リモートサーバーでコマンドを実行する場合、使用されるモジュールはすべて ssh2 接続ハンドルに基づいて完了します。
1. SSH2モジュールのインストール
1.1 必要な拡張パッケージをインストールします
[プレーン]
ウィゲット
tar zxf libssh2-1.4.2.tar.gz
cd libssh2-1.4.2
./configure && make && make install
wゲット
tar zxf libssh2-1.4.2.tar.gz
cd libssh2-1.4.2
./configure && make && make install
[プレーン]
ウィゲット
cd ssh2-0.11.3
phpize (エラーコマンドが見つからない場合は、apt-get install php5-dev)
./configure —with-ssh2 && make && make install
wゲット
cd ssh2-0.11.3
phpize (エラーコマンドが見つからない場合は、apt-get install php5-dev)
./configure —with-ssh2 && make && make install
1.2 PHPの設定情報を変更する
[プレーン]
cd /etc/php5/cgi
vim php.ini
追加された項目: extension=/usr/lib/php5/20090626/ssh2.so
ssh2.so は ssh2 をコンパイルしたときに取得されるモジュールで、上記がモジュールの場所です。
cd /etc/php5/cgi
vim php.ini
追加された項目: extension=/usr/lib/php5/20090626/ssh2.so
ssh2.so は ssh2 をコンパイルしたときに取得されるモジュールで、上記がモジュールの場所です。
[プレーン]
cd /etc/php5/cli
vim php.ini
追加された項目: extension=/usr/lib/php5/20090626/ssh2.so
ssh2.so は ssh2 をコンパイルしたときに取得されるモジュールで、上記がモジュールの場所です。
cd /etc/php5/cli
vim php.ini
追加された項目: extension=/usr/lib/php5/20090626/ssh2.so
ssh2.so は ssh2 をコンパイルしたときに取得されるモジュールで、上記がモジュールの場所です。
1.3 Webサーバーを再起動します
[プレーン]
/etc/init.d/lighttpd 再起動
/etc/init.d/lighttpd 再起動
1.4 ssh2が読み込まれているか確認する
[プレーン]
[root@localhost ~]php -m ssh2
ssh2
[root@localhost ~]php -m grep ssh2
ssh22. SSH2モジュールの接続アプリ
SSH2 に接続するには、ユーザー名とパスワード、および SSH キー形式の 2 つの方法があります。
2.1 ユーザー名とパスワード
[php]
$connection = ssh2_connect("192.168.6.222",22);
if (ssh2_auth_password($connection,"veno","ubuntu"))
{
echo "認証に成功しました! ";
}その他{
die("認証に失敗しました...");
}
$connection = ssh2_connect("192.168.6.222",22);
if (ssh2_auth_password($connection,"veno","ubuntu"))
echo "認証に成功しました! ";
}その他{
die("認証に失敗しました...");
}
2.2 SSHキー
[php]
$connection = ssh2_connect('192.168.6.222', 22, array('hostkey'=>'ssh-rsa'));
if (ssh2_auth_pubkey_file($connection, 'root',
「/root/.ssh/id_rsa」))
{
「公開鍵認証に成功しました」をエコーします
} その他 {
echo (「公開鍵認証に失敗しました」)
}
$connection = ssh2_connect('192.168.6.222', 22, array('hostkey'=>'ssh-rsa'));
if (ssh2_auth_pubkey_file($connection, 'root',
「/root/.ssh/id_rsa.pub」、
{
echo "公開鍵認証に成功しました";
} その他 {
echo ('公開鍵認証に失敗しました');
}
追記: 鍵の生成:
サーバー192.168.6.229にrootとしてログインします
#ssh-keygen
#ssh-keygen
ご質問がある場合は、Enter キーを押してください
229 でのキー検証を通じて 222 にログインしたい場合は、229 の公開キー id_rsa.pub を 222 に設定し、まず手動で root にログインしてから、次を実行します:
【プレーン】
cat id_rsa.pub >> ~/.ssh/authorized_keys
cat id_rsa.pub >> ~/.ssh/authorized_keys
このようにして、229 で 192.168.6.229 に ssh 接続し、パスワードを入力せずに 222 にログインできます。上記の php コードは 229 の検証にも合格できます。
3. SSH2モジュールの具体的な用途
SSH2認証に合格した後、取得された接続文字は$connection
3.1 ファイルのリモートコピーを実装する
リモートサーバーファイルをローカルにコピーします:
bool ssh2_scp_recv (リソース $session、文字列 $remote_file、文字列 $local_file )
追記: ファイルを受信するときは、次のようなファイル名を空にすることができます:
[php]
ssh2_scp_recv($connection, '/home/xiaozl/veno1.exe', '/home/xiaozl/')
ssh2_scp_recv($connection, '/home/xiaozl/veno1.exe', '/home/xiaozl/')
ローカルファイルをリモートサーバーにコピーします
bool ssh2_scp_send ( resource $session, string $local_file, string $remote_file [, int $create_mode] )
追記: ファイルを送信する場合、次のようなファイル名を空にすることはできません:
[php]
ssh2_scp_send($connection, '/home/xiaozl/package.xml', '/home/xiaozl/package.xml');
resource ssh2_exec( resource $session, string $command [, string $pty [, array $env [, int $width [, int $height [, int $width_height_type]]]]] )
[php]
$tcmd="cd /home/veno/gateway/radiusclient;";
$tcmd.="./nastool.sh get-status app=2b1c5364-db39-c76d-842c-11d4a81d555d";
$stream = ssh2_exec($connection, $tcmd);
stream_set_blocking($stream,true);
エコー stream_get_contents($stream);
$tcmd="cd /home/veno/gateway/radiusclient;";
$tcmd.="./nastool.sh get-status app=2b1c5364-db39-c76d-842c-11d4a81d555d";
$stream = ssh2_exec($connection, $tcmd);
stream_set_blocking($stream,true);
echo stream_get_contents($stream);
[php]
エコー「訪問しに来ました」
$connection = ssh2_connect('192.168.6.222', 22, array('hostkey'=>'ssh-rsa'));
if (ssh2_auth_pubkey_file($connection, 'root',
「/root/.ssh/id_rsa.pub」、
「/root/.ssh/id_rsa」))
{
「公開鍵認証に成功しました」をエコーします
//$flag=ssh2_scp_recv($connection, '/home/xiaozl/veno1.exe', '/home/xiaozl/');
//受信時、後続のファイル名は空でも構いません
//$flag=ssh2_scp_send($connection, '/home/xiaozl/package.xml', '/home/xiaozl/package.xml');
//送信する場合、次のファイル名を空にすることはできません
// $フラグをエコーします。
$tcmd="cd /home/veno/gateway/radiusclient;";
$tcmd.="./nastool.sh get-status app=2b1c5364-db39-c76d-842c-11d4a81d555d";
$stream = ssh2_exec($connection, $tcmd);
stream_set_blocking($stream,true);
エコー stream_get_contents($stream);
} その他 {
echo (「公開鍵認証に失敗しました」)
}
エコー "
";
$connection = ssh2_connect('192.168.6.222', 22);
ssh2_auth_password($connection, 'veno', '*******');
$tcmd="cd /home/veno/gateway/radiusclient;";
$tcmd.="./nastool.sh get-status app=2b1c5364-db39-c76d-842c-11d4a81d555d";
$stream = ssh2_exec($connection, $tcmd);
エコー "
";
エコー " - - - - - - - - - - - - - - - - - - - - - - - - -" ;
stream_set_blocking($stream,true);
エコー stream_get_contents($stream);
エコー " - - - - - - - - - - - - - - - - - - - - - - - - -" ;
エコー "
";
echo 「訪問するためにここに来ました」;
$connection = ssh2_connect('192.168.6.222', 22, array('hostkey'=>'ssh-rsa'));
if (ssh2_auth_pubkey_file($connection, 'root',
「/root/.ssh/id_rsa.pub」、
「/root/.ssh/id_rsa」))
{
echo "公開鍵認証に成功しました";
//$flag=ssh2_scp_recv($connection, '/home/xiaozl/veno1.exe', '/home/xiaozl/');
//受信時、後続のファイル名は空でも構いません
//$flag=ssh2_scp_send($connection, '/home/xiaozl/package.xml', '/home/xiaozl/package.xml');
//送信時、以下のファイル名を空にすることはできません
// $flag;
をエコーする
$tcmd="cd /home/veno/gateway/radiusclient;";
$tcmd.="./nastool.sh get-status app=2b1c5364-db39-c76d-842c-11d4a81d555d";
$stream = ssh2_exec($connection, $tcmd);
stream_set_blocking($stream,true);
echo stream_get_contents($stream);
} その他 {
echo ('公開鍵認証に失敗しました');
}
echo "
";
$connection = ssh2_connect('192.168.6.222', 22);
ssh2_auth_password($connection, 'veno', '*******');
$tcmd="cd /home/veno/gateway/radiusclient;";
$tcmd.="./nastool.sh get-status app=2b1c5364-db39-c76d-842c-11d4a81d555d";
$stream = ssh2_exec($connection, $tcmd);
echo "
";
エコー " - - - - - - - - - - - - - - - - - - - - - - - - -" ;
stream_set_blocking($stream,true);
echo stream_get_contents($stream);
エコー " - - - - - - - - - - - - - - - - - - - - - - - - -" ;
echo "
";