SSH tunnel 方式連結限制區域的伺服器
自從進了前公司,好久沒有時間好好的更新部落格內容了。近期離開待了將近兩年的公司,和好朋友一起創立了新的新創公司,一起在農業上用技術來幫助返鄉的青小農,希望讓用更有溫度的數據來降低青農們的門檻。
新的開始新的期待,希望自己能繼續保持赤子熱忱,把研究過的方法記錄下來分享。
在這個資安即國安的時代(嗯…那是政府的口號),大部分的伺服器都會有許多的安全設定,無論是更新的規則或是防火牆的限制等等。會限制在某個網段甚至是某個 IP 才能進行連線某些服務,對於常常喜歡加入文青到咖啡廳 Out coding 的宅宅,還是要想辦法鑽回去連線伺服器。
如果在限制區域中有一臺能對外開放連線的 SSH 機器,我們便能夠使用 SSH Tunnel 的方式橋接回去,透過通道連結到目標伺服器。說穿了其實這臺對外的機器就是跳板,我們可以利用這個跳板以類似 Port forwarding 的方式,將遠端伺服器的 IP 與 Port 對應至本機的一組位址與 Port。
Linux 下的連接方式
大部分的 Unix-Like 系統都有內建 SSH 的 Client 指令,我們只需要在 terminal 下指令就可以達到目的。
指令如下:
$ ssh -N -f -L LOCAL_PORT:DEST_HOST:DEST_HOST_PORT SSH_USER@SSH_SERVER_IP
SSH 參數說明
-N: 連接後不執行任何的遠端指令
-f: 連線後在背景執行
-L port:host:hostport: 在 Client 與 Server 建立一組 secure tunneling
LOCAL_PORT
:本機連接埠
DEST_HOST
:目標連線伺服器位址
DEST_HOST_PORT
:目標連線伺服器埠號
SSH_USER@SSH_SERVER_IP
:做爲跳板的機器連線
Example:
$ ssh -N -f -L 33890:192.168.1.100:5022 username@168.95.1.1
上述的例子,會透過 168.95.1.1 這臺跳板機器,將限制區域內 192.168.1.100,Port
為 5022 建立通道至本機的 33890 Port。可以透過 netstat
指令來觀察是否有建立成功。
$ netstat -ntulp | grep 33890
(Not all processes could be identified, non-owned process info
will not be shown, you would have to be root to see it all.)
tcp 0 0 127.0.0.1:33890 0.0.0.0:* LISTEN 5223/ssh
tcp6 0 0 ::1:33890 :::* LISTEN 5223/ssh
關閉通道
先查詢目前我們開啓的通道是在哪一個 process id (pid) 執行,再透過 kill
指令刪除執行中的 process 即可關閉。
查詢 ssh 服務與在 33890 port 執行的 process,取得 <PID>
。
$ ps aux | grep ssh | grep 33890
以 kill 指令刪除指定編號 <PID>
的 Process。
$ kill <PID>
以 netstate
檢查是否還有在執行。
$ netstat -ntulp | grep 33890
留言