SSH 通道(SSH Tunnel & SSH proxy)

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 運作情況

發佈留言