PHP リモート コピーとコマンドの実行

WBOY
リリース: 2016-06-13 12:50:20
オリジナル
972 人が閲覧しました

php リモート コピーしてコマンドを実行

php リモートコピーと実行コマンド

php がリモートでファイルをコピーし、リモートサーバーでコマンドを実行する場合、使用されるモジュールはすべて ssh2 接続ハンドルに基づいて完了します。

1. SSH2 モジュールのインストール

1.1 必要な拡張パックをインストールする

wget  http://www.libssh2.org/download/libssh2-1.4.2.tar.gz
tar zxf libssh2-1.4.2.tar.gz
cd libssh2-1.4.2
./configure && make && make install
ログイン後にコピー

wget  http://pecl.php.net/get/ssh2-0.11.3.tgz
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/cli
vim  php.ini
添加项:extension=/usr/lib/php5/20090626/ssh2.so
     ssh2.so是编译ssh2时得到的模块,上面是模块的位置。
ログイン後にコピー

1.3 Web サーバーを再起動します

/etc/init.d/lighttpd restart
ログイン後にコピー

1.4 ssh2 がロードされているかどうかを確認します

[root@localhost ~]php -m | grep ssh2
ssh2
ログイン後にコピー

2. SSH2モジュールの接続アプリケーション

SSH2 に接続するには、ユーザー名とパスワード、および ssh キー形式の 2 つの方法があります。

2.1 ユーザー名とパスワード

$connection = ssh2_connect("192.168.6.222",22);
if (ssh2_auth_password($connection,"veno","ubuntu"))
{
     	 echo "Authentication Successful! ";
}else{
     	 die("Authentication Failed...");
}
ログイン後にコピー

2.2 ssh キー

$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 "Public Key Authentication Successful\n";
} else {
 	 echo ('Public Key Authentication Failed');
}
ログイン後にコピー

追伸: 鍵の生成:

サーバー 192.168.6.229

に root としてログインします。

#ssh-keygen
ログイン後にコピー

ご質問がある場合は、Enter キーを押してください

結果の公開鍵は ~/.ssh/id_rsa.pub にあります

229 での鍵検証を通じて 222 にログインしたい場合は、229 の公開鍵 id_rsa.pub を 222 に設定し、まず手動で root にログインしてから、次のコマンドを実行します。

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 ( resource $session, string $remote_file, string $local_file )

追記: ファイルを受信するときは、次のようなファイル名を空にすることができます:

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] )

追記: ファイルを送信する場合、次のようなファイル名を空にすることはできません:

ssh2_scp_send($connection, '/home/xiaozl/package.xml', '/home/xiaozl/package.xml');
ログイン後にコピー

3.2 リモートサーバー上でコマンドを実行し、戻り値を取得します

resource ssh2_exec( resource $session, string $command [, string $pty [, array $env [, int $width [ , int $height [, int $width_height_type]]]] )

222 と 229 でコマンドを実行します:

$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 コード

<?php
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 "Public Key Authentication Successful\n";
  //$flag=ssh2_scp_recv($connection, '/home/xiaozl/veno1.exe', '/home/xiaozl/');
  //接收时,后面文件名可以为空
  //$flag=ssh2_scp_send($connection, '/home/xiaozl/package.xml', '/home/xiaozl/package.xml');
  //发送时,后面的文件名不能为空
  //echo $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); 
} else {
  echo ('Public Key Authentication Failed');
}
echo "<br/>";
$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 "<br/>";
  echo "-----------------------------------------------";
  stream_set_blocking($stream,true);
  echo stream_get_contents($stream); 
  echo "-----------------------------------------------";
echo "<br/>";
ログイン後にコピー




関連ラベル:
ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート
私たちについて 免責事項 Sitemap
PHP中国語ウェブサイト:福祉オンライン PHP トレーニング,PHP 学習者の迅速な成長を支援します!