ChinaUnix.net 首页 | 博客 | Linux | 论坛 | 人才 | 培训 | 知识库 | 资料 | 读书 | 手册 | 精华 | 下载 | 沙龙 | 搜索
Linux首页 | Linux论坛 | 论坛精华 | 开源新闻 | 技术文章 | 专题专栏 | 新手指南 | 迁移方案 | 产品方案 | 开源项目 | 开源图书 | 软件下载 | 人才招聘 | Linux博客
  搜索

  产品与方案
·中科红旗全面打造现代化邮政体系
·红旗助力“网上审批服务” 推动电子政务
·红旗正版化开创呼和浩特网吧建设新起点
·红旗Linux助信息产业部邮件服务器“快跑”
·中标普华Linux 为电子政务信息化保驾护航
·中标普华Linux助力基金产业
·中标普华Office率先支持UOF标准
·中标普华邮件系统助力西藏政府信息化建设
·红旗Linux助力国库集中支付系统改革
·红旗助中信卫星 掀起GIS通信应用风暴
·红旗软件助力烟草总局 全面建设“数字烟草”
·红旗助力“信访阳光工程”打造畅通信访渠道
·红帽联合FIS发布下一代实时核心银行平台
·红旗助力金盾 打造全无忧出入境信息系统
·红旗Linux全力打造中国邮政总局名址信息库
·爱尔兰证交所从Unix迁移到红帽企业Linux
·一流的意大利银行选择使用红帽企业Linux
·PLUS Finanzservice选择使用红帽企业Linux
·红帽助力TransACT Communications 公司
·法国零售业巨头Lapeyre采用Redhat Linux
·旅游预订网站选择使用红帽企业Linux
·马哈拉施特拉邦政府的红帽解决之道
·美国联邦政府案例
·红帽为慕尼黑展览会提供现代化集群系统
·Yuba郡用开源软件和红帽产品提高了效率
·红帽企业Linux助印度理工建立高性能计算中心
·采用红帽Linux 将系统维护时间缩短了65%
·从UNIX迁移到Linux使Peñoles公司获益非浅
·Hikal公司用红帽企业Linux开展任务关键的ERP项目
·KDE3.5.4新版本发布
·芝加哥商业交易所从Unix向Linux迁移
·南方基金管理有限公司成功案例 Red Hat Linux
·广东北电通讯设备有限公司成功案例
·挪威国家石油公司从UNIX迁移到红帽Linux,成本减半
·中央电视台CCTV动画部案例 Red Hat Linux

  图书

鸟哥的Linux私房菜基础学..


Linux程序设计.第3版


Linux设备驱动开发详解


  下载
·Endian Firewall
·linux kernel(Linux 内核)
·CentOS
·Fedora Core 6
·Scientific Linux
·Slackware 11.0
·Gentoo Linux
·ubuntu-6.10-i386服务器版本
·ubuntu-6.10-amd64服务器版
·ubuntu-6.10-i386桌面版
·ubuntu-6.10-amd64桌面版
·Engarde Linux
您的位置: Linux时代 > 技术文档 > 程序开发 >

将SSH与PHP相连接 确保传输数据的安全

日期:2007-08-21 作者:Linux时代 来自:linux.chinaunix.net


  SSH可以通过将联机的封包加密的技术进行资料的传递; 使用SSH可以把传输的所有数据进行加密,即使有人截获到数据也无法得到有用的信息……

  SSH可以通过将联机的封包加密的技术进行资料的传递; 使用SSH可以把传输的所有数据进行加密,即使有人截获到数据也无法得到有用的信息。同时数据经过压缩,大大地加快了传输的速度。总之,通过SSH的使用,可以确保资料传输比较安全并且传输效率较高。

  不过,并非所有人知道PHP可以与SSH连接的特性以及与执行远程命令的能力,不过这方面却非常有用。由于我们可以在很多不同的方面利用PHP,因此它有很多设置选项来控制其行为。一组庞大的可选参数能够保证您可以将 PHP 用于许多不同的目的,但这同时也意味着这些参数和服务端配置的组合会带来一些安全问题。笔者一直在PHP CLI应用程序中使用SSH,笔者是从cronjobs中使用它的,不过一开始并非十分简单,可以说颇费周折。关于安全使用Shell2 函数的手册也不是十分实用,笔者进行了多次试验之后才有了今天这篇小文章,愿您读了之后能为您配置PHP节省一点儿时间。

  在这篇文章中,笔者需要假设:

  你正在运行的操作系统是Debian / Ubuntu。如果你运行的不是Debian / Ubuntu,你可能需要用你的Linux发行版本提供的数据包管理器来替换本文对应内容。

  你运行的是PHP5.如果你运行的不是PHP5,可用PHP4代替之。

  你对PHP和服务器管理有基本的了解。

  你已经安装了PHP。

  先决条件

  安装程序包

  首先,让我们安装下面的程序包:

  sudo aptitude update

  sudo aptitude install php5-dev php5-cli php-pear buid-essential \

  openssl-dev zlib1g-dev

  安装完成进入下一步。

  编译libssh2

  在从sourceforge网站下载了Libssh2之后,我们需要编译它,不过不要担心,你只需要按照如下的方法操作:

  cd /usr/src

  wget surfnet.dl.sourceforge.net/sourceforge/libssh2/libssh2-0.14.tar.gz

  tar -zxvf libssh2-0.14.tar.gz

  cd libssh2-0.14/

  ./configure

  make all install

  如果你想检查是否有了一个新版本,可以查看SF.NET.不过,0.14这个版本就足够了。

  安装

  安装ssh2.so

  下一步,我们需要将libssh和 PHPr链接起来。有一个PECL模块可以完成这个功能。我们可以使用PEAR安装它。

  pear install -f ssh2

  -f参数确保SSH2被安装,即使并没有一个稳定的选择对象。你还可以使用如下的包名称:ssh2-beta来强行运行。

  现在你需要确保我们这个新的SSH2.SO模块被PHP加载。编辑你的php.ini文件(对于CLI实用程序:/etc/php5/cli/php.ini,对于Apache实用程序:/etc/php5/apache2/php.ini)

  extension=ssh2.so

  这应该放在“Dynamic Extensions”的下面,大约在第515行左右。

  PHP支持SSH编写代码

  你刚刚在PHP中启用了SSH2。那么现在应该如何利用它呢?有两个选择。SSH支持:

  1.执行方法:

  这告诉你的服务器的操作系统来执行什么东西,并且通过管道传回到你的脚本。

  2.外壳方法:

  这种方法在操作系统中打开一个实际的外壳,这正像通过终端应用程序登录时所操作的那样。有一些路由器并没有一个完全的POSIX一致性实施过程,而是在你登录时立即运行其自身的应用程序。这时你就需要这种方法。

  下面我们分别详述之:

  第一种方法:执行

  你最好为下面的代码创建函数或者是一个类,不过本文仅仅起到一个为您提供基本观念的作用,所以说你可以如此开始:

  if (!function_exists("ssh2_connect")) die("function ssh2_connect doesn't exist")

  // log in at server1.example.com on port 22

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

  echo "fail: unable to establish connection\n";

  } else {

  // try to authenticate with username root, password secretpassword

  if(!ssh2_auth_password($con, "root", "secretpassword")) {

  echo "fail: unable to authenticate\n";

  } else {

  // allright, we're in!

  echo "okay: logged in...\n";

  // execute a command

  if(!($stream = ssh2_exec($con, "ls -al" )) ){

  echo "fail: unable to execute command\n";

  } else{

  // collect returning data from command

  stream_set_blocking( $stream, true );

  $data = "";

  while( $buf = fread($stream,4096) ){

  $data .= $buf;

  }

  fclose($stream);

  }

  }

  第二种方法:外壳

  同样道理,你也可以为如下的代码编写函数或者一个类。不过,本文仅仅提供基本观念:

  if (!function_exists("ssh2_connect")) die("function ssh2_connect doesn't exist")

  // log in at server1.example.com on port 22

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

  echo "fail: unable to establish connection\n";

  } else {

  // try to authenticate with username root, password secretpassword

  if(!ssh2_auth_password($con, "root", "secretpassword")) {

  echo "fail: unable to authenticate\n";

  } else {

  // allright, we're in!

  echo "okay: logged in...\n";

  // create a shell

  if(!($shell = ssh2_shell($con, 'vt102', null, 80, 40, SSH2_TERM_UNIT_CHARS))){

  echo "fail: unable to establish shell\n";

  } else{

  stream_set_blocking( $shell, true );

  // send a command

  fwrite($shell,"ls -al\n");

  sleep(1);

  // & collect returning data

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

  if(strpos($data,"__COMMAND_FINISHED__") !== false){

  echo "okay: command finished\n";

  break;

  }

  if( (time()-$time_start) > 10 ){

  echo "fail: timeout of 10 seconds has been reached\n";

  break;

  }

  }

  在上面的例子中,你最好将stream_set_blocking设为false。

  通过SSH发送文件

  ssh2_scp_send($con, "/tmp/source.dat", "/tmp/dest.dat", 0644);

  如果不能正常工作

  请检查如下的几个方面:

  依照本文检查你操作的每一步

  在服务器端,在sshd_config 中必须启用“PasswordAuthentication yes”。在大多数服务器上默认值是yes,不过有些情况下,你可能需要将下面的一行加入到文件中,即亲自动手打开这个功能:

  /etc/ssh/sshd_config:

  # Change to yes to enable tunnelled clear text passwords

  PasswordAuthentication yes

  如果作了改变,就需要重新启动SSH:

  /etc/init.d/ssh restart

本文被浏览



 相关新闻

IBM与Zend展开深层次PHP合作2007-08-17 09:35:12
LAMP系统性能调优之--Apache和PHP2007-08-08 15:25:54
Zend Platform PHP性能提升详细评测2007-08-07 14:43:21
Apache与PHPChina合作 中国下载镜像开通2007-08-03 10:10:39
PHP项目联合转向PHP52007-07-18 16:33:26
2007首届PHP调查报告今发布2007-07-17 15:58:56


 相关评论
关于我们 | 联系方式 | 广告合作 | 诚聘英才 | 网站地图 | 免费注册

Copyright © 2001-2006 ChinaUnix.net All Rights Reserved

感谢所有关心和支持过ChinaUnix的朋友们

京ICP证041476号