ssh建立socks代理原理淺析

來源:互聯網
上載者:User

直入正題,先來一條命令:

ssh -N -D 9000 -f root@host.com

屬性解釋一下:

-D

這個屬性很神奇,關鍵的那句話是“and the application protocol is then used to determine where to connect to from the remote machine”,翻譯為”接下來應用程式協議就會決定去連哪”,應用程式協議指的是TCP/UDP。

它不僅僅是簡單連接埠轉寄,當資料到達伺服器端的這個連接埠後,ssh會嘗試解析這個請求,並進行TCP或者UDP請求(當然也就包括http請求),將得來的結果從這個連接埠再回傳到用戶端。

9000

代表指定本地的socks代理連接埠。

root@host.com

這是ssh標準常用命令~ 指定socks伺服器在哪,但這不代表監聽就一定開在伺服器,這取決於這條命令在哪執行。

-N

這是個輔助屬性,一般ssh連好以後就進入shell,可以讓你打命令了,我只要做連接埠轉寄,所以我不需要執行命令。

-f


這同樣是個輔助屬性,如果沒有它,只有-D和-N,那麼這個進程會在前台運行,阻塞後續操作,現象就是一個游標不停地在閃。用了它當前ssh進程就進後台運行了。

總結:

如果在伺服器上執行這條命令,譬如 ssh -N -D 9000 -f root@localhost,那麼伺服器就開好socks監聽連接埠了。

那麼這個連接埠轉寄可以被其他機器使用嗎?比如通過其他用戶端來直接連接 伺服器 的 9000 連接埠?答案是不行的,在主流 SSH 實現中,本地連接埠轉寄綁定的是 lookback 介面,這意味著只有 localhost 或者 127.0.0.1 才能使用原生連接埠轉寄 , 其他機器發起的串連只會得到“ connection refused. ”。好在 SSH 同時提供了 GatewayPorts 關鍵字,我們可以通過指定它與其他機器共用這個本地連接埠轉寄。

ssh-g  -N -D 9000 -f root@host.com

如果在客戶機上執行,遠程連root@remotehost,那麼相當於在本地開了一個socks代理監聽,socks伺服器就是本機,但通過remotehost來處理請求。

網上有很多翻牆教程說要一個myentunnel通過ssh實現本地socks代理,其實如果你自己有ssh的vps,執行命令的許可權,直接在遠程主機上執行就開好socks代理了,那麼這軟體也不用運行了。

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.