2011-07-27 126 views
1

在以下方面:VisualVM over ssh殼牌問題

我嘗試在一個腳本來執行2個以下命令:

ssh -D 9696 [email protected] 
/usr/bin/jvisualvm -J-Dnetbeans.system_socks_proxy=localhost:9696 \ 
    -J Djava.net.useSystemProxies=true 

有了這樣的2命令不起作用,因爲ssh命令,開始在一個交互模式,所以VisualVM在ssh關閉後啓動(顯式地使用'exit')。

有什麼可以解決這個問題的好方法?

PS。我正在運行MacOS X的

+0

那麼,什麼時候你想要jvisualvm命令運行? –

+0

ssh命令創建JVisualVM使用的某種隧道。所以我會同時說。 – Nikko

+0

我不是專家:ssh命令應該做什麼?它有助於在後臺運行它嗎? –

回答

1

嘗試:

SSH [email protected]「的/ usr/bin中/ jvisualvm -J-Dnetbeans.system_socks_proxy =本地主機:9696 -J Djava.net.useSystemProxies =真'

+0

那不是試圖在ssh的目標主機上執行jvisualvm嗎? (這不是我的意圖) – Nikko

0

如果我正確理解您的用例,您希望使用ssh連接設置端口轉發,那麼第二個命令在本地主機上運行,​​該本地主機使用localhost上的轉發端口。我想你可以試試-f-n選項來實現這個ssh。但它確實需要在遠程主機上運行命令。你可以使用僞造命令,如echo &> /dev/null

編輯:

像這樣的事情似乎在一個天真的測試工作:

ssh -f -D <port> remotehost <dummy_program_that_doesnt_quit>

+0

根據文檔,-n選項在需要密碼時不能使用(這是我的情況) – Nikko

+0

因此我說'-f'或'-n'。 ;)你也可以嘗試設置ssh鍵作爲替代。 – suvayu

0

這是最好的使用SSH密鑰和screen完成,所以我們與互動,並可以關閉SSH會話。

我也假設jvisualvm接管終端,所以當它退出時,我們清理屏幕會話。如果jvisualvm與終端分離,腳本會立即跳轉到清除screen會話,而jvisualvm正在運行。

ssh-add .ssh/key 
screen -dmS sshproxy ssh -i .ssh/key -D 9696 [email protected] 
/usr/bin/jvisualvm -J-Dnetbeans.system_socks_proxy=localhost:9696 \ 
-J Djava.net.useSystemProxies=true 
screen -r -d sshproxy -X quit