虚拟主机 SSH

问题由来:

我买了美国的虚拟主机,机器性能很好,空间巨大(150G) ,唯一的也是最大的问题,就是访问速度慢。

其实服务器本身至少能保证3M的带宽,我用其他服务器,单线程wget美国主机的文件,都可以稳定地保持在300K/s以上。

但用浏览器访问,由于需要发起多次tcp连接,而每次连接只传很小的几k文件就立即断掉,所以很慢。

最让我抓狂的就是,我上传一个软件包,总大小也就4、5M,但文件数量特别多,至少有几百甚至上千,传这么一个文件夹,没有2小时根本完不了。

我就想,如果虚拟主机有命令行,可以执行压缩或解压命令就好了。

传单个文件,再慢,也能保证每秒50K,像这样几M的文件,几分钟就可以搞定。

但如何解压呢?

答案就是:web版的命令行工具。

最简单的,就是system或exec函数,可以像SSH客户端一样,执行我们想要的命令。

注意,有些虚拟主机限制执行system和exec这两个函数,但我做了测试,证明是有其他方法的,一会儿再说这个方法是什么。

请您看到这个方法后,不要大肆宣传,或利用这个方法做一些危害主机安全的操作。如果这个方法也被禁用了,那以后就再也没有类似的方法了。

有了web的ssh,我们该怎么用呢?

1、首先要有清晰的unix文件的路径知识,知道什么是绝对路径,什么是相对路径,如何引用一个路径,等等。因为web版ssh只能方便地在当前一个目录下操作,稍有不慎,就可能造成无法挽回的后果。

2、学会使用ls、df、du、cp、mv、tar、zip等常用命令。使用web版ssh的出发点,就是希望以后在上传或下载文件时,可以预先打包,然后只传一个文件,这样可以大大减少传输时间的浪费。因此,列出目录、复制、移动、压缩和解压,就是必备的命令工具。

3、web版ssh还有一个功能,就是可以执行命令行的MySQL!!!最近我刚试着迁移discuz论坛,俗称论坛搬家,就是把论坛从A服务器迁移(搬家)到B服务器,重要的过程就是dump数据库,再import。而传统的工具,只有phpmyadmin,导出sql文件到还容易,但导入到另一个服务器,尤其是导入到另一个虚拟主机的时候,会受B主机的上传文件大小限制,大文件没法导入。还有,就是我遇到的乱码问题,由于B主机的大小限制只有2M,我的sql有5M,没办法,只能先压缩。import的时候,没有出错,但是导完发现都是乱码。A服务器是utf8,B是gbk。import的时候,本来import时选择了utf8编码的,但貌似对zip压缩的sql文件无效,最终是按gbk编码导入utf8的sql文件,这必然是乱码啊,结果就是论坛变成“蝌蚪文”。逼得我没办法了,只能开发一个web版ssh工具,最后用 mysql –default-character-set=utf8 -uleakon -pleakon leakon < leakon.sql 这个命令行才成功导入。这回,导入过程快多了,瞬间完成,不必再等着phpmyadmin上传本地sql文件。这一切,多亏了我的ssh工具,也就是本为的主角:web_shell。

按说这不叫ssh,只是一个web的命令行转发函数,但为了大家搜索虚拟主机ssh的时候能方便一些,就故意写了好多ssh。

大家可以看看国外的虚拟主机,大部分都支持ssh,而且……

唉,我都不想重复这些了,国外主机的优势,真不是国内idc服务商们可以比的。国内用最烂的服务、最烂的技术、最烂的界面来提供的虚拟主机,价格却是国外的好几倍甚至几十倍。价格我真不想再说了,反正最贵的都比国内最便宜的便宜好多好多,而且服务好得更多。

跑题了,回来说我的web_shell。

这是我简单开发的一个辅助工具,专门解决我上文提到的各种问题,加了一个简单安全验证,文件放在服务上,别人无法使用,只有你自己能用。

源码在我的GoogleCode里可以找到,地址是:

http://leakon.googlecode.com/svn/trunk/leakon/php/web_shell/web_zip.php

现在充其量是alpha 0.0.0.1版,里面还有一大堆debug的注释,本来还想加入一些新功能,但没那么多时间,先解决眼前的问题吧。

使用的时候,需要自己写一个web_inc.php,里面只要定义一个AUTH_KEY就可以了,这是你的密钥,只有知道密钥的人才可以使用这个web_shell。

默认的密钥,我是用一个字符串加当天日期的md5写的,如何快速计算一个字符串的md5呢?我早就写了一个工具,也许大家都没注意过,我就再发一次吧:

http://code.leakon.com/php/tools/

可以做一些简单的编码、解码计算,很好用哦。

源码也在googlecode里,大家自己找吧。

盼望得到您的指点或回复,谢谢!

另,php本身还有一个popen,也可以执行命令,一般的虚拟主机都没禁用,还是那句话,请慎用,要是用烂了,以后也就没得用了。

2 comments

  1. 这些工具看起来有点意思 😀 不过 php 这些实现都太慢了.

    另外, 偶有一个 mysql_tool.php 能够处理 gzip 的 dumpfile. mysql_tool.php 是从 vBB 来的,
    把所有的 fopen/fclose 全换成 gzopen/gzclose 等等, 这个版本就出来了.

  2. 楼主语言组织能力真不敢恭维,全文上面80%废话,就是用php的popen与system函数执行. 开了安全模式的话一样不起作用. 大型sql语句导入如果没有ssh,开启PHP安全模式以后,可以用php写一个读取指定SQL文件,一行一行读入,再原样扔到mysql里边去执行,这样,不管你的sql文件有多大,只要没有限制php执行最大超时时间,也是可以导入的. 另外,sql文件上传,完全可以用FTP上传呀. 压缩就用zip,新版本php基本上都内置了zip扩展,也可以用php来解压.

Leave a Reply

Your email address will not be published.

*