ssh 正向連接
client 連上 server ,將 server 能訪問的機器和端口 鏡像到 client 的端口上。
>>> ssh -L <客戶端IP 或省略>:<客戶端端口>:<服務器端可訪問的IP>:<服務器端可訪問IP的端口> 服務器端用戶名@服務器IP -p 服務器端端口 (預設22)
ssh 反向連接
client 連上 server ,將 client 能訪問的機器和端口 鏡像到 server 的端口上。
>>> ssh -R <服務器端IP 或省略>:<服務器端端口>:<用戶端可訪問的IP>:<用戶端可訪問IP的端口> 服務器端用戶名@服務器IP -p 服務器端端口 (預設22)
ssh socks 代理
>>> ssh -D <本地端IP 或省略>:<本地端口> 服務器端用戶名@服務器IP -p 服務器端 ssh 服務端口 (預設22)
範例
假設 遠端伺服器IP 是 remote_ip 為了敘述方便起見
(1)本地與遠端 帳號名稱相同
(2)本地端與遠端所啟動的 ssh 服務端口都是 22
ssh 正向連接
client 連上 server ,將 server 能訪問的機器和端口 鏡像到 client 的端口上。
$ ssh -L <客戶端IP 或省略>:<客戶端端口>:<服務器端可訪問的IP>:<服務器端可訪問IP的端口> 服務器端用戶名@服務器IP -p 服務器端端口 (預設22)
-L 將 local port 轉向
使用情境
假設在公司的電腦 不能直接連 ptt 但 remote_server 可以連
在公司 透過 remote_server 連 pttt
>>> ssh -NfL 2222:ptt.cc:22 remote_ip
>>> ssh bbs@localhost -p 2222
用 telnet 連 ptt (用 23 port)
>>> ssh -NfL 2323:ptt.cc:23 remote_ip>>> telnet localhost 2323由 localhost 到 remote_server 之間的資料有用 ssh 加密 但是由 remote_server 連往 ptt 的資料是明文
Tip 當連上ptt 時出現一堆亂碼時
這是因為終端機使用 UTF 編碼 無法顯示 BIG5 的 ptt 輸入下列指令後 可以顯示 BIG5
$ luit -encoding big5
$ ssh bbsu@localhost -p 2222
OR
$ ssh bbsu@localhost -p 2222
ssh 反向連接
client 連上 server ,將 client 能訪問的機器和端口 鏡像到 server 的端口上。
$ ssh -R <服務器端IP 或省略>:<服務器端端口>:<用戶端可訪問的IP>:<用戶端可訪問IP的端口> 服務器端用戶名@服務器IP -p 服務器端端口 (預設22)
使用情境
當你假日想要加個班?
在公司內使用的電腦 位於防火牆或 NAT 後面
且你所使用的電腦 可以連到 remote_server (ssh remote_ip)
client 連上 server ,將 client 能訪問的機器和端口 鏡像到 server 的端口上。
client(公司的電腦) 連上 server(remote_ip),將 client(公司的電腦) 能訪問的機器和端口 鏡像到 server 的端口上。
在公司 建立一個 公司電腦 (localhost:22 假設你位於公司的電腦 ssh 服務的端口是 22) 和 remote_ip 之間的 ssh 連線 並且要求 remote_ip 將所有連往其 2222 port 的通訊 全部轉往公司電腦的 ssh port
$ ssh -NfR 2222:localhost:22 remote_ip
-R 將 remote port 轉向
回到家後 用 ssh 連線家裡電腦的 2222 prot 登入公司電腦的 ssh 服務
此時 ssh 連到 remote_server (remote_ip) 上
$ ssh localhost -p 2222
ssh socks 代理
透過 遠端的 ssh server 當 proxy 連到外面
$ ssh -D <本地端IP 或省略>:<本地端口> 服務器端用戶名@服務器IP -p 服務器端 ssh 服務端口 (預設22)
-D 建 socks5 的 proxy
使用情境 1
假設你在公司的電腦(內網)不能上網
但 內網內有某台機器可以上網 (remote_ip) 或 你可以對外 ssh 連到一台具有上網能力的機器 (remote_ip)
使用情境 2
上班時 擔心網管監控你的一舉一動 透過 ssh tunnel 把自己的連線加密 就不會被看光光
$ ssh -fND localhost:8888 remote_ip # 透過 ssh 建立一個 socks5 通過代理上網
firefox -> ... -> 手動設定 proxy 將 socks 主機 設成 localhost, port 設定成 8888
DNS
讓 DNS 也繞 ssh 隧道出入 firefox 網址欄 輸入 "about:config"
篩選條件選 "dns"
找到 network.proxy.socks_remote_dns 將它設成 true
ssh 參數
$ man ssh
-N 不執行任何指令 (只連接主機 不打開 shell)
-f 在背景執行
-D 建 socks5 的 proxy
ssh tunnel 其他情境應用
Firefox 和 VNC 坐 ssh 火車過山洞; 用 iftop 確認
Performing UDP tunneling through an SSH connection
ssh tunnel dns - - How to tunnel everything through SSH