使 ssh 遠端連線的人很多, 但是 ssh 這個指令其實還有一些很有趣的tunnel用法,可以讓你擺脫一些限制。這邊稍微筆記一下:
Local port forwarding
在本地端開一個 port,然後 remote machine 會把封包轉送到指定的位置:
ssh -L <local_port>:<target_host>:<target_port> remote_user@remote_host
例如本地端防火牆只有開 22
port, 而封鎖了8080
port, 此時可以透過 local port forward 的方式,達到連線到遠端 8080 port。
ssh -L 1234:localhost:8080 cwliu@118.100.100.1
這時連到 localhost:1234,就相當於連線到 118.100.100.1:8080,避開防火牆的效果
Remote port forwarding (Reverse SSH)
這邊的-R
代表的是 remote 之意,直接舉個例子
ssh -R 5900:localhost:22 guest@remote-pc
在遠端 remote-pc
會開一個 5900 port,其流量會導到 localhost 的 22 port。實際的應用是當 local machine 沒有固定 IP 的時侯,可以先建立好此 ssh 連線。就可以讓遠端機器透過 localhost:5900 直接連線回local。
SOCKS Proxy Forwarding
主要可以用來保護非信任的網路,當不想讓別人知道自己的 http 連線時, 或是可以避開 IT 網路控管,可以用這個:
ssh -C -D 8080 cwliu@123.123.123.123
使用 -D
參數建立一個 socks proxy,瀏覽器設定 localhost:8080
的 SOCKS v4 proxy 就可以讓出去的 http 連線透過 ssh 安全地到達遠端機器。
-C
是把資料先壓縮後再傳送