精彩专题推荐:建站之入门课 建站之必修课 建站之关键课 网站价值所在 流量提高专题 css+div 标准 个人网站打造全过程
返回建站学首页
导航:
建站首页 | 网站设计 | 网站开发 | 网站运营 | 网页软件 | 建站指南 | 搜索优化 | 图像处理 | 视频教程 | 书籍教程 | 建站专题
当前位置:首页>网站开发>PHP教程>正文

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


来源:不详 时间:07-08-10 点击: 点击这里收藏本文
同样道理,你也可以为如下的代码编写函数或者一个类。不过,本文仅仅提供基本观念:

  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

9 7 3 1 2 4 8 :

  把此文章收藏到:          
广而告之
文章搜索
  • Google JZxue.Com

关于我们 | 联系我们 | 友情链接 | 网站地图
Copyright © 2005 - 2006 建站学 All rights reserved.