ホームページ > バックエンド開発 > PHPチュートリアル > PHP リモート コピーとコマンドの実行_PHP チュートリアル

PHP リモート コピーとコマンドの実行_PHP チュートリアル

WBOY
リリース: 2016-07-14 10:09:56
オリジナル
1010 人が閲覧しました

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.pub」、

「/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」、

「/root/.ssh/id_rsa」))

{
echo "公開鍵認証に成功しました";
} その他 {
echo ('公開鍵認証に失敗しました');
}

追記: 鍵の生成:

サーバー192.168.6.229にrootとしてログインします

【プレーン】

#ssh-keygen

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

生成された公開鍵は ~/.ssh/id_rsa.pub にあります

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');

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 でコマンドを実行します:

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

[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 "
";


www.bkjia.comtru​​ehttp://www.bkjia.com/PHPjc/477602.html技術記事 php がリモートでファイルをコピーし、リモート サーバーでコマンドを実行する場合、使用されるモジュールは ssh2 です。その後の操作はすべて ssh2 接続ハンドルに基づいて完了します。 1. SSH2 モジュールのインストール 1.1 インストールに必要なもの...
ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
最新の問題
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート