专注于互联网--专注于架构

最新标签
网站地图
文章索引
Rss订阅

首页 »PHP教程 » php数据库:SSH加PHP相连接保障数据库安全 »正文

php数据库:SSH加PHP相连接保障数据库安全

来源: 发布时间:星期四, 2009年2月12日 浏览:134次 评论:0



SSH可以通过将联机封包加密技术进行资料传递;使用SSH可以把传输所有数据进行加密即使有人截获到数据也无法得到有用信息……
  SSH可以通过将联机封包加密技术进行资料传递;使用SSH可以把传输所有数据进行加密即使有人截获到数据也无法得到有用信息同时数据经过压缩大大地加快了传输速度总的通过SSH使用可以确保资料传输比较安全并且传输效率较高
  不过并非所有人知道PHP可以和SSH连接特性以及和执行远程命令能力不过这方面却非常有用由于我们可以在很多区别方面利用PHP因此它有很多设置选项来控制其行为组庞大可选参数能够保证您可以将PHP用于许多区别但这同时也意味着这些参数和服务端配置组合会带来些安全问题笔者直在PHPCLI应用中使用SSH笔者是从cronjobs中使用它不过开始并非十分简单可以说颇费周折有关安全使用Shell2手册也不是十分实用笔者进行了多次试验的后才有了今天这篇小文章愿您读了的后能为您配置PHP节省点儿时间
  在这篇文章中笔者需要假设:
  你正在运行操作系统是Debian/Ubuntu如果你运行不是Debian/Ubuntu你可能需要用你Linux发行版本提供数据包管理器来替换本文对应内容
  你运行是PHP5.如果你运行不是PHP5,可用PHP4代替的
  你对PHP和服务器管理有基本了解
  你已经安装了PHP
  先决条件
  安装
  首先让我们安装下面包:
  
sudoaptitudeupdate  sudoaptitudephp5-devphp5-cliphp-pearbuid-essential\\  openssl-devzlib1g-dev


  安装完成进入下
  编译libssh2
  在从sourceforge网站WebSite下载了Libssh2的后我们需要编译它不过不要担心你只需要按照如下思路方法操作:
  
cd/usr/src  wgetsurfnet.dl.sourceforge.net/sourceforge/libssh2/libssh2-0.14.tar.gz  tar-zxvflibssh2-0.14.tar.gz  cdlibssh2-0.14/  ./configure  makeall


  如果你想检查是否有了个新版本可以查看SF.NET.不过0.14这个版本就足够了
  安装
  安装ssh2.so
  下我们需要将libssh和PHPr链接起来个PECL模块可以完成这个功能我们可以使用PEAR安装它
  pear-fssh2
  -f参数确保SSH2被安装即使并没有个稳定选择对象你还可以使用如下包名称:ssh2-beta来强行运行
  现在你需要确保我们这个新SSH2.SO模块被PHP加载编辑你php.ini文件

(对于CLI实用:/etc/php5/cli/php.ini对于Apache实用:/etc/php5/apache2/php.ini)
  extension=ssh2.so
  这应该放在“DynamicExtensions”下面大约在第515行左右
  PHP支持SSH编写代码
  你刚刚在PHP中启用了SSH2那么现在应该如何利用它呢?有两个选择SSH支持: [Page]
  1.执行思路方法:
  这告诉你服务器操作系统来执行什么东西并且通过管道传回到你脚本
  2.外壳思路方法:
  这种思路方法在操作系统中打开个实际外壳这正像通过终端应用登录时所操作那样些路由器并没有个完全POSIX致性实施过程而是在你登录时立即运行其自身应用这时你就需要这种思路方法
  下面我们分别详述的:
  第种思路方法:执行
  你最好为下面代码创建或者是个类不过本文仅仅起到个为您提供基本观念作用所以说你可以如此开始:
  
(!function_exists(\"ssh2_connect\"))die(\"functionssh2_connectdoesn’texist\")  //loginatserver1.example.comonport22  

(!($con=ssh2_connect(\"server1.example.com\",22)))

{  echo\"fail:unabletoestablishconnection\\n\";  }

{  //trytoauthenticatewithusernameroot,passwordsecretpassword  (!ssh2_auth_password($con,\"root\",\"secretpassword\")){  echo\"fail:unabletoauthenticate\\n\";  }{  //allright,we’rein!  echo\"okay:loggedin...\\n\";  //executeacommand  (!($stream=ssh2_exec($con,\"ls-al\"))){  echo\"fail:unabletoexecutecommand\\n\";  }{  //collectingdatafromcommand  stream__blocking($stream,true);  $data=\"\";  while($buf=fread($stream,4096)){  $data.=$buf;  }  fclose($stream);  }  }


  第 2种思路方法:外壳
  同样道理你也可以为如下代码编写或者个类不过本文仅仅提供基本观念:
  
(!function_exists(\"ssh2_connect\"))die(\"functionssh2_connectdoesn’texist\")  //loginatserver1.example.comonport22  

(!($con=ssh2_connect(\"server1.example.com\",22))){  echo\"fail:unabletoestablishconnection\\n\";  }

{  //trytoauthenticatewithusernameroot,passwordsecretpassword  

(!ssh2_auth_password($con,\"root\",\"secretpassword\")){  echo\"fail:unabletoauthenticate\\n\";  }



{  //allright,we’rein!  echo\"okay:loggedin...\\n\";  //createashell  [Page]

(!($shell=ssh2_shell($con,’vt102’,null,80,40,SSH2_TERM_UNIT_CHARS))){  echo\"fail:unabletoestablishshell\\n\";  }

{  stream__blocking($shell,true);  //sendacommand  fwrite($shell,\"ls-al\\n\");  sleep(1);  //&collectingdata  $data=\"\";  

while($buf=fread($shell,,4096)){  $data.=$buf;  }  fclose($shell);  }  }  }


  小提示:
  有时服务器忙碌或者个连接出错缓冲区没有数据PHP脚本就会停止从个命令输出(即使命令并没有完成!)中收集数据你可以为此进行如下操作:
  
ssh2_exec($con,’ls-al;echo\"__COMMAND_FINISHED__\"’);


  现在在你不断地检查缓冲区循环中只需要看下COMMAND_FINISHED你就可以知道你拥有了所有数据为了避免无限循环(死循环)可以用个10秒超时限制:
  
$time_start=time;  $data=\"\";  while(true){  $data.=fread($stream,4096);  (strpos($data,\"__COMMAND_FINISHED__\")!false){  echo\"okay:commandfinished\\n\";  ;  }  ((time-$time_start)>10){  echo\"fail:timeoutof10secondshasbeenreached\\n\";  ;  }  }


  在上面例子中你最好将stream__blocking设为false
  通过SSH发送文件
  
ssh2_scp_send($con,\"/tmp/source.dat\",\"/tmp/dest.dat\",0644);


  如果不能正常工作
  请检查如下几个方面:
  依照本文检查你操作
  在服务器端在sshd_config中必须启用“PasswordAuthenticationyes”在大多数服务器上默认值是yes不过有些情况下你可能需要将下面行加入到文件中即亲自动手打开这个功能:
  
/etc/ssh/sshd_config:  #Changetoyestoenabletunnelledcleartextpasswords  PasswordAuthenticationyes


  如果作了改变就需要重新启动SSH:
  
/etc/init.d/sshrestart

0

相关文章

读者评论

发表评论

  • 昵称:
  • 内容: