設想一下這樣的場景: 你出差在外,或者生病在家,有個緊急的需求要處理,涉及到數個源代碼文件的改動,你親自修改需要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之類的少數命令外,幾乎就跟你在公司做各種操作沒有兩樣,所以,發揮你的想象力吧 :)