用ssh和socat分分鐘搞定Linux各種埠轉發
本地埠映射
小明寫了一個Web服務,監聽hosta上8080埠,小王現在想訪問這個服務,有沒有快速的方法?
其實很簡單,小明只需要做這兩件事情:
- 申請一台帶公網IP的公有雲伺服器hostb,我們假設ip地址是12.34.56.78
- 在hosta上執行下面的命令,它會建立一個從hosta到hostb的ssh會話,同時將8080埠映射到hostb的1080埠。
ssh -R 1080:localhost:8080 root@12.34.56.78
這樣,小王就可以愉快的用http://12.34.66.78:1080訪問小明的服務了。
遠程Unix Socket映射
除了將我們本地服務通過埠映射提供給其它人訪問,我們還可以通過埠轉發玩一些更high的。比如下面這條命令,它把監聽在遠程主機12.34.56.78上的mysql服務unix socket映射到本地的/var/run/mysqld.temp.sock,這樣,小明就可以用mysql -S /var/run/mysqld/mysqld.temp.sock來訪問遠程主機的mysql服務了。
socat "UNIX-LISTEN:/var/run/mysqld.temp.sock,reuseaddr,fork" EXEC:"ssh root@12.34.56.78 socat STDIO UNIX-CONNECT:/var/run/mysqld/mysqld.sock"
當然,小明如果不喜歡本地unix socket,他還可以用下面的命令把12.34.56.78上的mysql映射到本地的5500埠,然後使用mysql -p 5500命令訪問。
socat TCP-LISTEN:5500 EXEC:ssh root@12.34.56.78 "socat STDIO UNIX-CONNECT:/var/run/mysqld/mysqld.sock"
UDP也不在話下,比如下面這條命令可以把12.34.56.78的udp 161埠映射到本地的1611埠:
socat udp-listen:1611 system:ssh root@12.34.56.78 "socat stdio udp-connect:remotetarget:161"
上面代碼和使用方法,我都已經上傳到我的github
推薦閱讀:
※關於固態硬碟的定址原理和定址速度的一個疑問?
※現在的 Linux 內核和 Linux 2.6 的內核有多大區別?
※Linux 下進行 PHP 開發,相比 Windows 環境有哪些好處?
※Ubuntu 系統下有哪些整理硬碟的工具?