Read Sean

Read me, read Sean.
posts - 508, comments - 655, trackbacks - 9, articles - 4

ssh+tsocks - 远程办公利器

Posted on 2011-02-09 22:37 laogao 阅读(5022) 评论(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之类的少数命令外,几乎就跟你在公司做各种操作没有两样,所以,发挥你的想象力吧 :)

Feedback

# re: ssh+tsocks - 远程办公利器  回复  更多评论   

2011-02-09 22:56 by 沈觅仁
这样是否是太折腾了?
Tsocks也只是针对又需要网络通信的程序才有用罢了,而且以你的例子来看,也就是方便(穿墙、避开svn访问权限)更新Svn。总不能执行编辑、编译吧?
$ tsocks vim a.cpp
$ tsocks make all

另外,有关远程工作(写代码、编译啥的),我还是喜欢GNU screen

# re: ssh+tsocks - 远程办公利器  回复  更多评论   

2011-02-09 23:12 by laogao
@沈觅仁
执行编辑和编译操作通常都是在本地要做的事儿,svn的sandbox在哪里检出,哪里就适合做这些操作。vpn不也是解决网络访问的问题吗,呵呵。

# re: ssh+tsocks - 远程办公利器  回复  更多评论   

2011-02-10 10:58 by Ian Yang
只是svn服务器的话用不着动态绑定,用-L做本地端口转发就好了

假设有 ssh_server, svn_server

ssh_server是你有SSH权限那台服务器的IP或域名,svn_server是从ssh_server上可以访问到SVN服务器的IP或域名,svn_server是在ssh_server上解析的,所以可以用svn_server的内网IP

用下面的命令,访问本地3690,都相当 *从ssh_server* 访问svn_server的3690

$ ssh -L 3690:svn_server:3690 user@ssh_server

然后把本机当成svn服务器就行了

$ svn checkout svn://localhost/project1

很久前画了些图展示三种端口转发的作用 http://www.doitian.com/2010/06/illustration-of-ssh-port-forwarding/

# re: ssh+tsocks - 远程办公利器  回复  更多评论   

2011-02-10 13:35 by laogao
@Ian Yang
谢谢你提供的链接,很直观的介绍,只是其中有些文字和图示不匹配,L、R、D什么的,可能会让人看不懂。

我之所以用-D而不是-L,主要是考虑到需要先后访问多个服务的时候,每个服务都去开个tunnel显得不够灵活,还是-D最省事也更接近VPN的效果一些,呵呵。

# re: ssh+tsocks - 远程办公利器  回复  更多评论   

2011-02-10 14:14 by laogao
@Ian Yang
用-L还有个问题,那就是我本地的svn sandbox已经自带了资源库IP地址等信息,本地端口转发意味着我还要做一次svn switch --relocate,回到公司还得再改回来,这也是件麻烦事儿 ^_^

只有注册用户登录后才能发表评论。


网站导航: