SSH Tunnel是基於SSH 的一種應用方式,可在兩個server間建立安全的通道
分兩種應用方式
- 把遠端機器上其他應用程式監聽的port 轉接到本機上,可以直接在本機上telnet 該port
ssh quanto@192.168.10.2 -L 19988:192.168.10.2:9988 -L 19989:192.168.10.2:9989
這樣可以使本機上也能直接下指令
telnet 127.0.0.1 19988 連到遠端機器的9988 port
telnet 127.0.0.1 19989 連到遠端機器的9989 port
- 開啟proxy
ssh -fN -D 7777 quanto@192.168.10.2
這樣可以開啟ssh proxy 功能,只要指定該proxy 就可以相當於在遠端機器執行程式
ps.
f 代表背景執行
D 代表動態proxy,使用7777 port
ex.
java -DsocksProxyHost=localhost -DsocksProxyPort=7777
java 執行時可以加上這段指令,就像是在遠端機器上執行意思一樣
- 綜合以上兩者,可以實現進入內部網路執行
在遠端機器(192.168.10.2)上先執行
ssh -D 9999 user@192.168.20.7
在本機上執行
ssh -L 9999:localhost:9999 quanto@192.168.10.2
這樣就可以跨越兩台(以上)機器連到內部服務
- 火狐與proxy


- Linux也可以直接設定proxy

- Eclipse 設定 java 執行時的參數
1. 執行時,選擇 Run Configurations… 2. 在Java Application 選擇該專案 3. 在Arguments 的 VM 參數的部分 加入"-DsocksProxyHost=localhost -DsocksProxyPort=7777" 4. Apply 5. Run


- 另外也可以拿來當作VPN使用
https://wiki.archlinux.org/title/VPN_over_SSH
- jconsole 也可以在本機監看遠端java
在建立好通道的本機
cd /usr/bin
./jconsole -J-DsocksProxyHost=localhost -J-DsocksProxyPort=7777 service:jmx:rmi:///jndi/ rmi://192.168.20.7:9988/jmxrmi -J-DsocksNonProxyHosts=
另外 java 本身也要設定成可以被監看,執行時要加入一些設定,如下
java -Xmx512M -Djava.rmi.server.hostname=192.168.20.7 -Dcom.sun.management.jmxremote -Dcom.sun.management.jmxremote.port=9988 -Dcom.sun.management.jmxremote.rmi.port=9989 -Dcom.sun.management.jmxremote.authenticate=false -Dcom.sun.management.jmxremote.ssl=false -Dsun.zip.disableMemoryMapping=true -jar $server/$jar &
上述的例子用了兩個port,實際測試只需要-Dcom.sun.management.jmxremote.port=9988 即可,9989 port 非必要
這個例子是在本機,經由proxy 監看在第二層開啟的java 運作情況