您所在的位置: 首页>>开发>>Web>>PHP>>

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

  • 摘要:SSH可以通过将联机的封包加密的技术进行资料的传递;使用SSH可以把传输的所有数据进行加密,即使有人截获到数据也无法得到有用的信息。笔者一直在PHP CLI应用程序中使用SSH,笔者是从cronjobs中使用它的,愿您读了之后能为您配置PHP节省一点儿时间。
  • 标签:SSH  PHP  数据  安全

第二种方法:外壳

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

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

【相关文章】

【责任编辑:火凤凰 TEL:(010)68476606-8036 】


共2页: 上一页 [1] 2
【内容导航】
如何有效提升企业安全审计应用水平
重复数据删除技术
Web安全云时代
NAC安全访问控制
微软Forefront企业安全解决方案
 
 验证码: (点击刷新验证码)   匿名发表
  • Visual C++ 完全自学宝典

  • 作者:强锋科技,朱洪波
  • Visual C++ 6.0是微软公司为程序人员提供的Visual Studio 6.0工具套件中的重要组成部分。本书由浅入深地介绍使用Visual C++ 6.0..
Copyright©2005-2008 51CTO.COM 版权所有