仓酷云

标题: PHP网站制作之用SSH与PHP相毗连 确保数据传输的平安性... [打印本页]

作者: 老尸    时间: 2015-2-3 23:51
标题: PHP网站制作之用SSH与PHP相毗连 确保数据传输的平安性...
掌握静态网页的制作技术是学习开发网站的先决条件,这一点就讲到这里,因为这篇文章不是教程文章,也就不对技术进行深入的刨析了。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 commandfwrite($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
passwordsPasswordAuthentication yes
假如作了改动,就需求从头启动SSH:
/etc/init.d/ssh restart
在这里想谈谈自己这六个多月的PHP学习心得,希望对给比我还新的新手们有所帮助,讲的不是很深刻,甚至有的想法可能是错误的,希望不要误导新人才好,大家要有自己的主见。
作者: 海妖    时间: 2015-2-4 06:30
至于模板嘛,各位高人一直以来就是争论不休,我一只小菜鸟就不加入战团啦,咱们新手还是多学点东西的好。
作者: 若相依    时间: 2015-2-7 02:48
建数据库表的时候,int型要输入长度的,其实是个摆设的输入几位都没影响的,只要大于4就行,囧。
作者: 若天明    时间: 2015-2-8 12:24
有位前辈曾经跟我说过,phper 至少要掌握200个函数 编起程序来才能顺畅点,那些不熟悉的函数记不住也要一拿手册就能找到。所以建议新手们没事就看看php的手册(至少array函数和string函数是要记牢的)。
作者: 爱飞    时间: 2015-2-12 20:09
说点我烦的低级错误吧,曾经有次插入mysql的时间 弄了300年结果老报错,其实mysql的时间是有限制的,大概是到203X年  具体的记不清啦,囧。
作者: 乐观    时间: 2015-3-8 09:52
学好程序语言,多些才是王道,写两个小时代码的作用绝对超过看一天书,这个我是深有体会(顺便还能练打字速度)。
作者: 小女巫    时间: 2015-3-15 21:15
学好程序语言,多些才是王道,写两个小时代码的作用绝对超过看一天书,这个我是深有体会(顺便还能练打字速度)。
作者: 灵魂腐蚀    时间: 2015-3-20 06:45
对于初学者来说不推荐去拿钱买的。当然如果一个网站你经常去用,而且里面的资料也比较有用,最好还是买个会员比较好,毕竟那些也是别人的工作成果。
作者: 小妖女    时间: 2015-3-25 12:30
建议加几个专业的phper的群,当然啦需要说话的人多,一处一点问题能有人回答你的,当然啦要让人回答你的问题,平时就得躲在里面聊天,大家混熟啦,愿意回答你问题的人自然就多啦。
作者: 愤怒的大鸟    时间: 2015-3-28 02:34
为了以后维护的方便最好是代码上都加上注释,“予人方便,自己方便”。此外开发文档什么的最好都弄齐全。我觉得这是程序员必备的素质。虽然会消耗点很多的时间。但是确实是非常有必要的。
作者: 深爱那片海    时间: 2015-3-31 05:19
至于模板嘛,各位高人一直以来就是争论不休,我一只小菜鸟就不加入战团啦,咱们新手还是多学点东西的好。
作者: 第二个灵魂    时间: 2015-4-8 18:56
本文当是我的笔记啦,遇到的问题随时填充
作者: 变相怪杰    时间: 2015-4-12 04:53
首先我是坚决反对新手上来就用框架的,因为对底层的东西一点都不了解,造成知识上的真空,会对以后的发展不利。我的观点上手了解下框架就好,代码还是手写。当然啦如果是位别的编程语言的高手的话,这个就另当别论啦。
作者: 因胸联盟    时间: 2015-4-12 19:19
开发工具也会慢慢的更专业,每个公司的可能不一样,但是zend studio是个大伙都会用的。
作者: 仓酷云    时间: 2015-4-13 15:08
建议加几个专业的phper的群,当然啦需要说话的人多,一处一点问题能有人回答你的,当然啦要让人回答你的问题,平时就得躲在里面聊天,大家混熟啦,愿意回答你问题的人自然就多啦。
作者: 蒙在股里    时间: 2015-4-16 19:10
爱上php,他也会爱上你。
作者: 莫相离    时间: 2015-4-23 16:42
基础有没有对学习php没有太大区别,关键是兴趣。
作者: 飘飘悠悠    时间: 2015-4-26 17:33
作为一个合格的coder 编码的规范是必须,命名方面我推崇“驼峰法”,另外就是自己写的代码最好要带注释,不然时间长了,就算是自己的代码估计看起来都费事,更不用说别人拉。
作者: 不帅    时间: 2015-4-28 06:25
遇到出错的时候,我经常把错误信息直接复制到 google的搜索栏,一般情况都是能搜到结果的,不过有时候会搜出来一大片英文的出来,这时候就得过滤一下,吧中文的弄出来,挨着式方法。




欢迎光临 仓酷云 (http://ckuyun.com/) Powered by Discuz! X3.2