欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  后端开发

php远路copy以及执行命令

程序员文章站 2024-01-09 08:22:16
...
php远程copy以及执行命令

php远程copy以及执行命令

php远程copy文件以及在远程服务器中执行命令时,所用到的模块是ssh2,以后所有的操作都依据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.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');
}

Ps: 密钥生成:

在服务器192.168.6.229上面以root登录

#ssh-keygen

有什么提问基本上回车即可

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

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

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: 接收文件时,后面文件名可以为空,如:

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:发送文件时,后面的文件名不能为空,如:

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上的命令具体实例:

$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代码

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




php远路copy以及执行命令

声明:本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn核实处理。

相关文章

相关视频