在以下背景中: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.
答案 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