Posted on 2011-02-09 22:37
laogao 阅读(5353)
评论(5) 编辑 收藏 所属分类:
Computer Usage
设想一下这样的场景: 你出差在外,或者生病在家,有个紧急的需求要处理,涉及到数个源代码文件的改动,你亲自修改需要10分钟,电话和在公司的同伴沟通然后由他/她来修改则需要1小时。公司svn服务仅支持svn://协议,且仅限内网访问,而你只有一个ssh账号可以远程登录到公司某台Linux/UNIX服务器。
你暗自庆幸,幸好管理员有先见之明,为你留了个ssh口子,这样至少你还可以ssh上去通过命令行的方式在服务器上做svn checkout,vim ...和svn commit。不过如果你认为这就是全部,那就太小瞧ssh了。
ssh有个命令行参数 -D [地址:]端口,含义是在某个本地地址的某个端口上开SOCKS服务进行监听,把这个端口的数据通信以加密形式转发到ssh的另一端。你说好,我有了一个SOCKS服务器,但我又不是要上网走代理,svn也并不天然支持SOCKS啊,有什么用呢? 嗯,这正是tsocks的用武之地,它能透明的让普通应用程序也走SOCKS,安装方法很简单: 主流的Linux发行版,如Debian、Archlinux等的默认软件仓库已经自带了tsocks,通常只需要apt-get install或pacman -S即可,Mac OS X下则可以利用MacPorts安装,然后修改配置文件/etc/tsocks.conf(MacPorts会安装到/opt/local/etc目录),可以在样本文件tsocks.conf.sample的基础上修改,通常只要配置server = 127.0.0.1即可,其他都可以默认。
有了这些打底,剩下的就很简单了: 首先 ssh -D 1080 -f -N 用户名@公司服务器的公网地址 在本机的1080端口开启SOCKS服务;然后按照你平时使用svn的习惯,只是在命令前加上tsocks,类似这样: tsocks svn up 或者 tsocks svn ci -m 'blahblahblah' 等等即可,本地的svn sandbox不需要任何修改。
这个例子可以说只是冰山一角,不论是ssh还是tsocks都还有更高级的用法,而这个通道一旦打通,它的效果就像是简化版的VPN,除了ping之类的少数命令外,几乎就跟你在公司做各种操作没有两样,所以,发挥你的想象力吧 :)