Read Sean

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

          ssh+tsocks - 遠程辦公利器

          Posted on 2011-02-09 22:37 laogao 閱讀(5373) 評論(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,回到公司還得再改回來,這也是件麻煩事兒 ^_^
          主站蜘蛛池模板: 阜城县| 交口县| 罗田县| 定结县| 嵩明县| 临沭县| 页游| 应城市| 六盘水市| 齐齐哈尔市| 广宁县| 岫岩| 榆树市| 枣阳市| 来宾市| 大渡口区| 伽师县| 贺兰县| 丰城市| 莲花县| 宁阳县| 湘潭县| 桑植县| 兰西县| 涿州市| 合作市| 邹城市| 望奎县| 安康市| 仙游县| 达尔| 龙口市| 阳原县| 红安县| 正宁县| 多伦县| 平昌县| 景宁| 阳原县| 繁昌县| 巴东县|