2011-07-27 127 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