首頁 後端開發 php教程 php远程copy以及执行命令_PHP教程

php远程copy以及执行命令_PHP教程

Jul 14, 2016 am 10:09 AM
php 命令 執行 文件 伺服器 遠端

php远程copy文件以及在远程服务器中执行命令时,所用到的模块是ssh2,以后所有的操作都依据ssh2连接句柄完成。


1. SSH2模块的安装
1.1 安装需要的扩展包

[plain] 
wget   
tar zxf libssh2-1.4.2.tar.gz 
cd libssh2-1.4.2 
./configure && make && make install 

wget   
tar zxf libssh2-1.4.2.tar.gz
cd libssh2-1.4.2
./configure && make && make install

[plain]
wget   
cd ssh2-0.11.3 
phpize   (如果报错命令没有找到,apt-get install php5-dev) 
./configure —with-ssh2 && make && make install 

wget 
cd ssh2-0.11.3
phpize   (如果报错命令没有找到,apt-get install php5-dev)
./configure —with-ssh2 && make && make install
1.2 修改php配置信息

[plain] 
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时得到的模块,上面是模块的位置。

[plain] 
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服务器

[plain] 
/etc/init.d/lighttpd restart 

/etc/init.d/lighttpd restart
1.4 查看是否加载了ssh2

[plain] 
[root@localhost ~]php -m | grep ssh2 
ssh2 

[root@localhost ~]php -m | grep ssh2
ssh22. SSH2模块的连接应用
SSH2连接有两种方式,分别是用户名密码,ssh密钥形式。

2.1 用户名与密码

[php]
$connection = ssh2_connect("192.168.6.222",22); 
if (ssh2_auth_password($connection,"veno","ubuntu")) 

         echo "Authentication Successful! "; 
}else{ 
         die("Authentication Failed..."); 

$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密钥

[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 "Public Key Authentication Successful\n"; 
} else { 
     echo ('Public Key Authentication Failed'); 

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

Ps: 密钥生成:

在服务器192.168.6.229上面以root登录


[plain] 
#ssh-keygen 

#ssh-keygen
有什么提问基本上回车即可

后成的公钥在~/.ssh/id_rsa.pub

如果想在229通过密钥验证登录到222上面,则把229的公钥id_rsa.pub cp到222上面,先手动登录root,然后运行:


[plain] 
cat id_rsa.pub >> ~/.ssh/authorized_keys 

cat id_rsa.pub >> ~/.ssh/authorized_keys
这样就可以在229上面ssh 192.168.6.229不需要输入密码即可登录到222。上面php代码在229上面也可以通过验证。

 

3. SSH2模块的具体应用
通过SSH2验证通过后,得到的连接符为$connection

3.1 实现远程copy文件
远程服务器文件copy到本地:

bool ssh2_scp_recv ( resource $session, string $remote_file, string $local_file )

Ps: 接收文件时,后面文件名可以为空,如:


[php] 
ssh2_scp_recv($connection, '/home/xiaozl/veno1.exe', '/home/xiaozl/') 

ssh2_scp_recv($connection, '/home/xiaozl/veno1.exe', '/home/xiaozl/')

 

本地文件copy到远程服务器

bool ssh2_scp_send ( resource $session, string $local_file, string $remote_file [, int $create_mode] )

Ps:发送文件时,后面的文件名不能为空,如:

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

在229上面执行222上的命令具体实例:


[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); 
echo 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]
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 "
"; 
$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 "
"; 
  echo "-----------------------------------------------"; 
  stream_set_blocking($stream,true); 
  echo stream_get_contents($stream);  
  echo "-----------------------------------------------"; 
echo "
"; 

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 "
";
$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 "
";
  echo "-----------------------------------------------";
  stream_set_blocking($stream,true);
  echo stream_get_contents($stream);
  echo "-----------------------------------------------";
echo "
";


 

www.bkjia.comtruehttp://www.bkjia.com/PHPjc/477602.htmlTechArticlephp远程copy文件以及在远程服务器中执行命令时,所用到的模块是ssh2,以后所有的操作都依据ssh2连接句柄完成。 1. SSH2模块的安装 1.1 安装需...
本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn

熱AI工具

Undresser.AI Undress

Undresser.AI Undress

人工智慧驅動的應用程序,用於創建逼真的裸體照片

AI Clothes Remover

AI Clothes Remover

用於從照片中去除衣服的線上人工智慧工具。

Undress AI Tool

Undress AI Tool

免費脫衣圖片

Clothoff.io

Clothoff.io

AI脫衣器

AI Hentai Generator

AI Hentai Generator

免費產生 AI 無盡。

熱門文章

R.E.P.O.能量晶體解釋及其做什麼(黃色晶體)
2 週前 By 尊渡假赌尊渡假赌尊渡假赌
倉庫:如何復興隊友
4 週前 By 尊渡假赌尊渡假赌尊渡假赌
Hello Kitty Island冒險:如何獲得巨型種子
3 週前 By 尊渡假赌尊渡假赌尊渡假赌

熱工具

記事本++7.3.1

記事本++7.3.1

好用且免費的程式碼編輯器

SublimeText3漢化版

SublimeText3漢化版

中文版,非常好用

禪工作室 13.0.1

禪工作室 13.0.1

強大的PHP整合開發環境

Dreamweaver CS6

Dreamweaver CS6

視覺化網頁開發工具

SublimeText3 Mac版

SublimeText3 Mac版

神級程式碼編輯軟體(SublimeText3)

適用於 Ubuntu 和 Debian 的 PHP 8.4 安裝和升級指南 適用於 Ubuntu 和 Debian 的 PHP 8.4 安裝和升級指南 Dec 24, 2024 pm 04:42 PM

適用於 Ubuntu 和 Debian 的 PHP 8.4 安裝和升級指南

CakePHP 專案配置 CakePHP 專案配置 Sep 10, 2024 pm 05:25 PM

CakePHP 專案配置

CakePHP 日期和時間 CakePHP 日期和時間 Sep 10, 2024 pm 05:27 PM

CakePHP 日期和時間

CakePHP 檔案上傳 CakePHP 檔案上傳 Sep 10, 2024 pm 05:27 PM

CakePHP 檔案上傳

CakePHP 路由 CakePHP 路由 Sep 10, 2024 pm 05:25 PM

CakePHP 路由

討論 CakePHP 討論 CakePHP Sep 10, 2024 pm 05:28 PM

討論 CakePHP

如何設定 Visual Studio Code (VS Code) 進行 PHP 開發 如何設定 Visual Studio Code (VS Code) 進行 PHP 開發 Dec 20, 2024 am 11:31 AM

如何設定 Visual Studio Code (VS Code) 進行 PHP 開發

CakePHP 快速指南 CakePHP 快速指南 Sep 10, 2024 pm 05:27 PM

CakePHP 快速指南

See all articles