壳问题

时间:2011-07-27 14:46:13

标签: shell

在以下背景中:VisualVM over ssh

我尝试在一个脚本中执行以下两个命令:

ssh -D 9696 john.doe@121.122.123.124
/usr/bin/jvisualvm -J-Dnetbeans.system_socks_proxy=localhost:9696 \
    -J Djava.net.useSystemProxies=true

使用这样的2命令不起作用,因为ssh命令以交互模式启动,因此在ssh关闭后显式启动VisualVM(显式地使用'exit')。

什么是解决该问题的好方法?

PS。我正在运行MacOS X.

3 个答案:

答案 0 :(得分:1)

尝试:

ssh john.doe@121.122.123.124'/ usr / bin / jvisualvm -J-Dnetbeans.system_socks_proxy = localhost:9696 -J Djava.net.useSystemProxies = true'

答案 1 :(得分:0)

如果我正确理解您的用例,您希望使用ssh连接设置端口转发,则第二个命令在localhost上运行,localhost使用localhost上的转发端口。我认为您可以尝试使用-f-n选项来实现此目标。但它确实需要在远程主机上运行命令。您可以使用像echo &> /dev/null这样的伪造命令。

编辑:

这样的事情似乎在一个天真的测试中起作用:

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

答案 2 :(得分:0)

最好使用SSH密钥和screen,这样我们就可以与SSH会话进行交互并关闭它。

我还假设jvisualvm控制终端,这样当它退出时,我们会清理屏幕会话。如果jvisualvm与终端分离,则在screen正在运行时,脚本会立即跳转到清理jvisualvm会话。

ssh-add .ssh/key
screen -dmS sshproxy ssh -i .ssh/key -D 9696 john.doe@121.122.123.124
/usr/bin/jvisualvm -J-Dnetbeans.system_socks_proxy=localhost:9696 \
-J Djava.net.useSystemProxies=true
screen -r -d sshproxy -X quit