云计算:安全是七寸 — Google App Engine 宕机

2010年2月25日 Killman 没有评论

云计算虽然是一个热门的概念,但是安全仍然是云计算的七寸。不管吹嘘得有多好,一家宕机就大面积的用户业务停掉这样的事情只需要发生一次,就够热闹的。这不,Google App Engine 宕机了。

(英文:Google App Engine is Down – Backup Data Center Having Problems, 中文: (CSDN新闻)谷歌App Engine宕机:备份数据中心发生故障

分类: $IT Thoughts 标签:

DBCP连接池(一):原理与基本配置

2010年1月29日 Killman 没有评论

大约在半年前,曾经帮同事解决过一个Commons-dbcp连接池的问题。当时遇到的问题比较诡异,但是其实并不是什么特别复杂的问题,了解DBCP的原理,大部分问题就迎刃而解了。本文主要对连接池的基本原理以及dbcp的实现方式做一个分析,对dbcp的配置参数结合原理做一个简单解释。

连接池扼要

JDBC是一套通用的Java语言与多种数据库(文件)通讯的标准API。大部分针对数据库服务器(例如Oracle, MySQL等等)的JDBC实现都是基于TCP/IP连接的客户端-服务器端通讯方式。

当我们需要执行一个数据库操作时,有下面三步:

  1. 客户端与服务器之间建立一个数据库连接
  2. 执行某种数据库操作
  3. 断开连接

如果每次处理都要走上面的三步,则应用程序与数据库服务器都要将大量的时间和资源消耗在数据连接的断开与建立上。对于并发较大的系统,建立一次连接然后缓存起来连续使用,直到程序结束等情况下再释放连接,就能够将系统资源集中在对数据库操作的处理上,从而大大提高性能。通常情况下将数据连接的建立和断开委托给一种能够数据库连接池的组件或服务进行管理。而DBCP, C3p0, Proxool等都是常用的开源的连接池组件。

就好像A公司在郊外,他们公司附近没有出租车。如果A公司有人要出去办事,他必须打电话给出租公司订车,用完车后他还要付账报销。 这样每个人出去一趟都必须订车、退车和报销。员工的很多时间白白花费在这上面了。于是A公司跟出租车公司定了一个合同,出租车公司给了他们一个车队。要用车随时去楼下找车队就可以了,用完了也不必结帐,A公司统一跟出租车公司订车和结帐。这个车队就好比连接池,由公司(应用程序)来统一向出租车公司(数据库服务器)订车(建立连接)和退车(关闭连接)。

DBCP的配置参数以及背后的原理

Commons-dbcp连接池的配置参数比较多,也比较复杂,主要分为

  • Jdbc连接参数(username, password, url, driverClassName, connectionProperties )
  • 事务处理参数 (defaultAutoCommit, defaultReadOnly, defaultTransactionIsolation, defaultCatalog)
  • 连接池参数(详见下文)
  • 连接池中链接存活性测试参数(详见下文)
  • 预处理查询池化参数(poolPreparedStatements, maxOpenPreparedStatements)
  • 丢弃失效链接相关参数(详见下文)以及一个控制是否可以正常情况下处于访问连接池包装下的底层JDBC链接参数(accessToUnderlyingConnectionAllowed)

其中Jdbc链接参数、事务处理都跟连接池关系不大,另预处理查询池化参数本文不详细叙述。有关commons-dbcp的详细参数配置信息请参考官方文档

连接池的配置

再用车队来比喻,出租车公司每提供一辆车给A公司,A公司肯定要付出一定费用。这时候维持车队的大小就很重要了,在项目少用车少的时候,车队肯定要减少,不然很多空闲车辆也要付出成本;在项目多用车多的时候,肯定要扩大车队,不然车不够用,车队忙不过来。A公司可以简单地设地两个阀值来动态调节车队中空闲的车辆数目以满足动态需求,一个是最小空闲车辆数(最小空空闲连接数(minIdle),当剩余的空车数目小于该数目时,A公司就向出租车公司请求加入新车。 一个是最大空闲车辆数(maxIdle),当剩余的车大于该数目时,就将刚刚用用完的车还给出租车公司从而减少车队数量。

另外,这家出租车公司可能要为多个客户服务,要考虑能够提供给A公司的最大的车数量,不能超过某个数量(maxActive)。所以A公司想出租车申请新车时首先要看下当前正在用的车辆数目是否超过了这个最大数目,如果没有超过那就直接申请新车,否则可以让申请者(应用程序中执行请求的线程)等待 (maxWait<=0, 无限等待; maxWait>0 当等待时间超过 maxWait时,失败)。

在连接池中,这几个参数是十分重要的,官方的说明如下,是我们调节系统性能时需要认真考虑的值。


Parameter Default Description
initialSize 0 The initial number of connections that are created when the pool is started.

Since: 1.2
线程池启动时初始化的连接数
maxActive 8 The maximum number of active connections that can be allocated from this pool at the same time, or non-positive for no limit.
最大活动连接数,如果非正整数,则不做限制。
maxIdle 8 The maximum number of connections that can remain idle in the pool, without extra ones being released, or negative for no limit.
最大空闲连接数。
minIdle 0 The minimum number of connections that can remain idle in the pool, without extra ones being created, or zero to create none.
最小空闲连接数。
maxWait indefinitely The maximum number of milliseconds that the pool will wait (when there are no available connections) for a connection to be returned before throwing an exception, or -1 to wait indefinitely.
(在没有连接可用时)连接池等待一个数据连接可用时的以毫秒计的最大等待时间,超时以后抛出异常, -1 则将无限等待

实际上,Dbcp 依赖于 commons-pool 来存储连接对象。 BasicDataSource默认使用GenericObjectPool来管理连接对象。除了请求的线程会在请求和返回连接过程中影响池中连接实例外,另有一个跑着GenericObjectPool.Evictor类型 (implements Runnable) 的实例的线程,也会影响池中的数据库连接。

请继续阅读下一篇:《DBCP连接池(二):Commons-pool的设计》

推荐:(袁伟时)现代化与中国的历史教科书问题

2010年1月28日 Killman 没有评论

以前只知道日本右翼历史教科书是怎么篡改历史的,最近读到袁伟时先生的这篇文章,我深受震动,原来我们的历史教科书也有问题。 我们自小接受的历史教育里竟然也有对历史的裁剪、修改,给我们对中国近代历史的认识造成了太严重的影响。影响有多严重,列个提纲各位看官就知道了:

  • 火烧圆明园是无法避免的? (看过这个问题你会明白第二次鸦片战争中中方对于战争的起因、过程和结果都负有重要责任)
  • (义和团)是爱国壮举还是摧残文明和反人道的罪行 (看过这个问题,你会明白义和团的罪恶和八国联军侵占北京不只是对方的责任。 两国交战不杀来使在中国历史上早已认知,要是随意杀死对方的民众就更不应该了,这一段历史教科书里对史实的篡改实在是太糟糕了。在我们记恨南京屠杀时,也想想我们的清政府和义和团所犯下的杀戮。)

初中历史教科书图片

初中历史教科书图片(本图片不代表袁伟时文章中批判的教材,袁文可能指的是别的版本)


我们的心中积累了太多的仇恨和屈辱,认真对待这一百多年的近代历史,对我们的世界观异常重要。毫无疑问,帝国主义在中国领土上犯下了罪行,但是正确地认知这一进程中的真相,认识到我们的国家在这个转变过程中所经历的曲折、所犯下的错误和之所以这样的原因,或许我们能原谅清朝当政者为何犯下愚昧的错误,理解义和团先民为何会去破坏铁路、会去杀无辜的教民,明白为何赞叹夏宫的英法要烧毁圆明园、为何八国联军杀进北京最后却用庚子赔款做一些有益于中国民族进步的事情,还原一个真实的历史,才能让我们有一个正常的、自信的、健全的世界观。

再引一段吧:

19、20世纪中国人干了不少“无法无天”的事,义和团事件是其中的典型。值得重视的是不但至今有人把野蛮的行为说成是“革命”,而且到了20世纪90年代,有人竟把主张遵守现行国际条约的观点视为应该严加批判的卖国投降观点!

这篇文章或许是因为其真实而对国人的思想产生强大的震撼,直接导致了刊登该文的杂志主编被撤职,杂志停刊。

2006年1月11日“中国青年报”的《冰点》周刊因刊出袁伟时文章《现代化与历史教科书》[2],因而导致暂时停刊,并引致主编李大同及副主编卢跃刚撤职。3月1日《冰点》复刊,刊登张海鹏的《反帝反封建是近代中国历史的主题》文章批驳上文,并拒刊袁伟时《为何、何时、如何反帝反封建》文章。(来源:维基百科

也许有的读者会质疑袁伟时的观点,那太好了,希望有人出来反驳一下,真理越辩越明。

下面给出两个版本的链接,内容大致是一样的,只是青年报的版本用语可能更谨慎些。同时放在这里是为了降低因墙影响不能阅读的概率。

文章链接:

分类: @迷思 标签:

十多年后再见到卓依婷

2010年1月11日 Killman 2 条评论

上初中的时候,因为舅舅、叔叔他们都特别喜欢卓依婷,我听得最多的歌声差不多也是卓依婷的,于是渐渐喜欢上了她的歌声。初高中的时候就听舅舅说她已经因为车祸离世了,感到十分惋惜。

后来我把我们家人对于卓依婷的热爱,以及她已经离世等等都告诉了老婆。才知道她也是喜欢卓依婷的歌的。不过这两天听了三四个人演唱的《小城故事》,觉得都和原唱有一定的差距。而卓依婷估计唱这个歌的时候年纪还很小,歌声有些区别也是可以理解的。

于是我顺便Google了一下有关卓依婷的资料,没想到发现搜索提示框里排名第二的是”卓依婷之死“,于是搜索进去,结果大吃一惊,原来她并没有去世。各种消息都是以讹传讹吧。老婆说,他应该把这个消息告诉我舅舅和叔叔,他们也应该会感到高兴的,因为可以买新专辑了 :)

她只是中间休息了两年(她81年出生,我想休息一下学学东西也是好的),但是2001年复出后没有很特别的成果,加上个人低调等原因,有关她的消息不是特别多。可能这些年努力也不容易,她之前给人民的主要印象还是年少时的作品,如今好些年了,要转变也不是一个容易的事情。祝她顺利。

顺便去看了看她的博客,觉得很平易近人,有一种很亲切的感觉。

另外,她现在签约优格音乐文化有限公司,暂时不知道该公司的更多资料。她还开通了官方网站

分类: @生活 标签:

请资助小怡帆

2010年1月6日 Killman 1 条评论

Update(2010-3-18): 小怡凡在各界爱心人士的帮助下终于踏上了去往美国医疗的路程。详情在拯救小怡凡主页上。 还要担心手术会怎样,真心祈愿她早日康复!

从小怡凡的主页上了解到:第一,如果要孩子一定要让自己身体健康、强壮;第二,如果孩子有不好,要提早治疗,找几家医院或许能相互参考。

2010年1月19日亚历山大医生带回来怡帆的血样检测及影像分析结果,排除了由DNA变异导致的先天性肺疾病, 确切的病症是”肺细胞代谢缺陷”,肺间质形成脂肪蛋白阻碍氧气进入血液交换,这正是肺部影像一直呈现毛玻璃状的真正原因, 由此导致左心室向肺部加速血液输送,形成“肺动脉高压”。北京市儿童医院2006年对怡帆实施过两次“肺灌洗”, 灌洗液培养结果未见蛋白成分,后归结于“肺纤维化”。几年来,未能及时对症治疗和控制肺间质的脂肪蛋白生长, 错过了治疗及手术修复的最佳时机,目前必须通过全肺移植来救治。

由于我的工作性质以及之前努力工作却忽视了身体,我有些担心我家小宝贝,祈祷他/她在妈妈肚子里健康孕育、成长!
===============================================================================

下面是一个患病需要高昂费用去救助的孩子,他的爸爸妈妈只有一年多点的时间来筹集500,000$,人民币是350万。病情越来越严重了,时间快到了,可是却还不一定能够攒足这笔费用。我老婆看了小孩的照片和故事,心疼不已。我看着也心疼。只可惜我却失业半年了,经济状况也不好,只能提供一点捐款。在这里贴下小怡帆的照片,希望过往的人们看到,伸出援助之手。在为小怡帆祈祷的同时,也祈愿天下的小孩子都健康活泼。

a

很感谢您能抽时间了解怡帆的事情,怡帆是我四岁的女儿,患有肺动脉高压,需要二十四小时吸氧来维持呼吸, 北京儿童医院诊断为肺纤维化,国内无法医治。在和睦家医院亚历山大医生的全力帮助下, 怡帆有机会去美国德州儿童医院接受心肺移植手术,费用十分昂贵,作为孩子的父母, 我们没有足够的时间来积累这笔费用,为此,和睦家基金会帮助我们建立了怡帆基金,寻求社会的帮助, 请您抽出少量的时间浏览www.yifanfund.comwww.help-yifan.org, 同时将这个网站告诉您周围的朋友,并恳请提供一些帮助来挽救这个孩子。谢谢!

上面的话来自怡帆的父亲,我们的朋友潘俊廷。

详细请去救助小怡帆的主页

分类: @生活 标签:

My Vimrc File

2009年12月24日 Killman 没有评论

Apply the recommend vimrc file:

cp /usr/share/vim/vimcurrent/vimrc_example.vim  /usr/share/vim/vimrc

~/.vimrc: Keep it simple!

" 设置文件编码检测类型及支持格式
 set fencs=utf-8,ucs-bom,gb18030,gbk,gb2312,cp936
 
 "显示行号
 set nu!
 
 " 中文帮助
 if version > 603
 set helplang=cn
 endi
 
 " 设置代码自动缩进
 :set cindent
 
 """""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""
 " cscope setting (from http://easwy.com/blog/archives/advanced-vim-skills-cscope/)
 """""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""
 if has("cscope")
   set csprg=/usr/bin/cscope
   set csto=1
   set cst
   set nocsverb
   " add any database in current directory
   if filereadable("cscope.out")
       cs add cscope.out
   endif
   set csverb
 endif
 
 nmap <C-@>s :cs find s <C-R>=expand("<cword>")<CR><CR>
 nmap <C-@>g :cs find g <C-R>=expand("<cword>")<CR><CR>
 nmap <C-@>c :cs find c <C-R>=expand("<cword>")<CR><CR>
 nmap <C-@>t :cs find t <C-R>=expand("<cword>")<CR><CR>
 nmap <C-@>e :cs find e <C-R>=expand("<cword>")<CR><CR>
 nmap <C-@>f :cs find f <C-R>=expand("<cfile>")<CR><CR>
 nmap <C-@>i :cs find i ^<C-R>=expand("<cfile>")<CR>$<CR>
 nmap <C-@>d :cs find d <C-R>=expand("<cword>")<CR><CR>
分类: Tools & Tips 标签:

Arguments on Java & C++

2009年12月23日 Killman 没有评论

The Hypertable Team claimed they choose C++ to be Hypertable implement language for performance issues. They gave two points about that, Hypertable is memory (malloc) intensive and and CPU intensive. They also say:

(Hadoop)There are some places where Java is sub-optimal. In particular, at scale, there will be considerable memory pressure in the Namenode of the DFS. Java is a poor choice for this type of memory hungry application. Another place where the use of Java is sub-optimal is the post-map sorting in preparation for the reduce phase. This is CPU-intensive and involves the type of CPU work that Java is not good at.

There are a bunch comments on the Wiki Page. Someone gave another views. A guy gave two links to support Java is not so bad.

Some interesting comparative articles.

http://www.ddj.com/cpp/184401976?pgno=1

http://www.idiom.com/~zilla/Computer/javaCbenchmark.html

分类: c/c++, java 标签:

My Ubuntu Installation log

2009年12月18日 Killman 没有评论

业余使用Ubuntu好些年了,装了删删了装的,为了以后方便,把这次的新版本的安装配置过程都记录下来。

第一步,从官方下载 Ubuntu-desktop。

第二步,在VMWare上安装,并安装VMWare-tools。 在ubuntu-desktop-9.10上,不像以前需要手工安装一些包,安装linux头文件,这次一路回车就搞定了。

到这里系统就算安装完毕,发现已经用去了8G硬盘的 37%。

(update 2009-12-28): 事后发现根本没有装好,再次尝试安装,基本上各个模块编译时都会出现error日志,并报告模块没有成功编译。而原来在 ubuntu 8.10下是工作正常的。 为什么升级到 ubuntu 9.10就出错了呢?一开始在网络上搜索,看过 VMware workstation fails after 9.0.4 upgrade to 9.10, 根据该帖建议去打补丁, 但是都没有解决。

后来,去Vmware官方找了下是否有更新,结果发现 VMware Workstationfor Windows 出了新的6.5.3版本, 在 Release Notes 中发现 Ubuntu 9.04 is fully supported. 猜测也许是需要新版本。 尝试下载新版本安装后,重新安装和配置 vmware-tools, 一切顺利!

第三步,安装我需要的各种软件。

0. 设置source.list,我使用 mirrors.163.com.
设置网卡:

auto lo
iface lo inet loopback

auto eth0
iface eth0 inet static
address 192.168.1.126
netmask 255.255.255.0
gateway 192.168.1.1

#auto eth0
#iface eth0 inet dhcp

1. 安装 vim/ctags/cscope, 设置颜色,缩进等。 The details are noted at Here.

  • install: sudo apt-get install vim
  • Install Chinese vim help: download from http://vimcdoc.sourceforge.net/, tar and enter the directory, execute
  • sudo ./vimcdoc.sh -i
  • sudo apt-get install exuberant-ctags cscope

2. 安装 JDK/C++工具:

sudo apt-get install sun-java6-jdk sun-java6-source
sudo apt-get install build-essential

3. 安装manuals:

开发用的手册页:

sudo apt-get install manpages-dev

安装 Posix 相关的手册页。pthread 库相关的手册页就在这里面,而不在 Dev manual pages 中。

sudo apt-get install manpages-posix manpages-posix-dev

4. 安装版本工具 Subversion 和 Git:

sudo apt-get install subversion subversion-tools git-doc git-core

5. Configure SSH server:

sudo apt-get install openssh-server

.
6. Install LAMP server by tasksel, and configure;
7. 中文支持。我安装系统时用的是英文,因此 LANG=’en_US.UTF-8′。中文输入遵循下面三步骤即可:

  1. Install Simple Chinese Language support.
  2. install: sudo apt-get install scim scim-pinyin
  3. System->Administration->Language Support->Input Method, select scim.
    1. Reboot system, 此时就可以使用智能拼音了。

Resource: SCIM Setup, SCIM Usage

中文问题的解决没有这么简单,还存在下面的问题:

  • gedit不能打开中文文件: 这个文件主要是gedit猜测编码的机制造成的,略加修改就可以。具体参考这里
  • vim不能打开中文文件:Here
  • pdf不能阅读某些中文文件: 问题的症状是能够阅读某些中文pdf,但是还有一些pdf则表现为乱码。问题的原因不太清楚,但是Google后安装了一个新包 poppler-data,就解决了。(sudo apt-get install poppler-data)

8. 安装 CHM 格式文档查看工具 kchmviewer.

sudo apt-get install kchmviewer

但是 kchmviewer 在查看 boost中文文档页时出现了编码错误。当然这不一定就是kchmviewer有问题,也可能是boost中文文档本身的兼容性等。于是另外安装了chmsee, chmsee的另外一个优点就是安装时体积很小,下载过程中才下了几百K。当然也可能是因为我提前把其他需要的库都已经装上了…
9. ruby gems:

sudo apt-get install rubygems1.9.1

10. 声音问题的解决:这里

分类: Tools & Tips 标签:

设计与开发的五条原则

2009年12月15日 Killman 没有评论

从2004年初(大学二年级第二学期)加入学校就业信息网站,靠写代码获得第一笔收入,迄今已经将近六年。

第一条原则,首先弄清你的问题是什么。这一条规则无论怎么强调都不过分。

《Programming Pearls》第二版的开篇,Jon Bentley 讲的就是,首先弄清你的问题是什么! 在你没有详细、明确地定义好你的问题之前,你所做的大部分工作只产出废物。这些年,最头疼的事情,就是经常搞了一大堆东西,累死累活,甚至加班加点,最后总才发现很多事情偏离了目标。但这样的事情,总是在周围一遍一遍地发生。

一个工程师,如果在接到一个问题时首先不是尽可能挖到细致的资料,定义问题,并向了解问题的人去反馈,详细讨论问题的定义。虽然问题定义不是那么容易,但不首先定义好问题,那就是不合格的工程师。

还有很多原则,大抵都是这个原则的派生品。

第二条规则, 弄清你要干什么,以及哪些先干,哪些后干,哪些根本就不需要干。

说白了,就是把问题分解,列个表,排个先后顺序。这是大部分程序员最蹩脚的部分。高效的本质不是捧着ThoughtWorks那本《卓有成效的程序员》,而是我这条原则。我对Joel的书里印象最深刻的就是有关用Excel列任务列表的部分。

这条仍然是如此重要,以致于著名的YAGNI, (You ain’t gonna need it )仅仅是一条推论而已。

当然,区分的标准是什么?It depends. 但是最重要的参照是,怎么做你能获得最大产出?也许你会在所谓的扩展性、适应需求变化与可工作的代码,用户的需求之间抉择。 最重要的还是可工作的代码,能够按时 ship the beta!

记住,先列出来要干什么;然后分清先后顺序,然后淘汰那些可以不干的。

第三条规则,KISS。 Keep It Simple Stupid。
用郭靖和杨过来比喻,代码要像郭靖一样用最简单直接的方式强壮地工作,不需要太多的波折。你的程序要是像杨过的人生那么复杂、聪明,早死翘翘了。 你的程序要简单强壮地干活,思想越简单越好,功能和特性越少越好。

这一条对于设计是至关重要的,浮躁的程序员们经常要在架构设计中引入模式、分层,又或者是绚丽的Ajax效果之类,完全是无知下的自虐。我也是好些年后才明白这条道理,直到后来开始使用Unix下的那些让无数人着迷的工具,才真真地看到了这条规则的巨大威力。

要特别澄清一下,KISS 与你的程序是否好用,是否易于复用,不但不矛盾,而且是相辅相成的。你要知道的只是你的程序应该做什么,然后努力做好。借用《Programming Pearls》开篇里法国作家兼飞机设计师的话:“设计者确定其设计已经达到了完美的标准不是不能再增加任何东西,而是不能再减少任何东西”。又如Chuck Yeager将军(第一个超音速飞行的人)赞扬一架飞机的机械系统时的用词是“结构简单、部件很少、易于维护、非常坚固”。

第四条规则,一键集成和适当的自动化测试。

这条不多说了,在有条件的情况下做会受益非浅。

其他还有一些很有名的原则,例如 DRY (Don’t Repeat Yourself), 也许是因为一开始我就懂得了这个道理(尤记得大学的时候把ASP代码提取函数,封装Head和Foot,将写HTML Table的封装成方法来根据不同的数据集打印,好傻。),感触没那么深。

六年了,好快。

(Update 2009-12-23)
第五条: 一定需要且只需要数页简单明了的设计说明书。

这个设计说明最好不用word,最好是放在源代码下的html或者txt格式。简单粗线条的UML最适宜用在这种地方。当然设计文档也可以放在别的地方。

P.S.
用原则这个词,是为了强调重要性。遣词或有问题,慎自斟酌之。

Cygwin下使用公钥登录SSH

2009年12月2日 Killman 没有评论

为了直接使用公钥登录SSH,而不使用密码登录Cygwin,费了老大劲,很长时间以来一直没有成功。此前,一直是按照网络上流传的方法,主要是生成key,然后设置到 authorized_keys中。遵照官方的命令,修改sshd_config, ssh_config, 但是一直没有奏效(不过遵照这些方法,在Ubuntu等系统上配置成功)。

昨天偶然在这个页面上看到 ssh-user-config 命令,试了试,就成功了!各位设置不成功的同学,考虑使用下这个命令,然后一路回车确认即可。

另一篇重要的参考文章:这里

顺便记录下在探索 SSH使用公钥登录过程中学到的几个sshd相关的命令:

# debug more information 
ssh  -vvv  localhost
 
#start services
net start sshd
#or
cygrunsrv  --start  sshd
 
#login command for user name that has space
ssh  Mickey\  mouse@127.0.0.1
 
#copy publickey to remote host
king@king:~$ cat .ssh/id_dsa.pub | ssh master "cat - >> ~/.ssh/authorized_keys"
#copy publickey from remote host
king@king:~$  ssh master "cat .ssh/id_dsa.pub" | cat - >> ~/.ssh/authorized_keys"

在某些情况下,必须使用代理登录SSH服务器。connect.c is the simple relaying command to make network connection via SOCKS and https proxy. It is mainly intended to be used as proxy command of OpenSSH. You can make SSH session beyond the firewall with this command.

在Windows下,只需要下载connect.exe到c:/windows,然后在 ~/.ssh/config中添加如下配置:

ProxyCommand connect -S x.x.x.x:x %h %p

connect.c 还支持 https 代理,真不赖。

分类: server & system 标签: