首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >多动态端口转发的SSH隧道

多动态端口转发的SSH隧道
EN

Unix & Linux用户
提问于 2011-08-23 10:44:43
回答 2查看 23.3K关注 0票数 8

我试图通过ssh隧道监视运行在不同服务器上的多个JVM。

感谢这里的一位UNIX专家,我已经通过以下方法为单个服务器实现了这个运行:

  1. 在目标服务器上运行jstatd
  2. 将Visual设置为使用9696作为其socks代理端口。
  3. 在我的本地PC上,运行: ssh -L 2222:server1 1:22 bastion-host
  4. 在本地PC上运行: ssh -o port=2222 -D 9696 -L 1099: localhost :1099 localhost

这就行了。现在,当我尝试并隧道到第二个服务器时,我尝试:

  1. 在我的本地PC上,运行: ssh -L 3333:server2 2:22 bastion-host
  2. 在本地PC上运行: ssh -o port=3333 -D 9696 -L 2099: localhost :1099 localhost

然而,最后一步抱怨的是:

代码语言:javascript
复制
bind: Address already in use
channel_setup_fwd_listener: cannot listen to port: 9696

有人做过类似的事吗?

更新:

之所以如此复杂,是因为jstatd是一个RMI服务器应用程序:

http://download.oracle.com/javase/1.5.0/docs/tooldocs/share/jstatd.html

与RMI应用程序一样,这些应用程序使用RMI注册表进行注册。通过防火墙使用rmi需要我使用SOCKS,如下所述:

http://download.oracle.com/javase/1.4.2/docs/guide/rmi/faq.html#firewallOut

不幸的是,visualvm只允许我设置SOCKS代理端口一次,-D选项不允许我将相同的本地端口转发到两个服务器.

EN

回答 2

Unix & Linux用户

发布于 2011-08-23 18:06:38

我认为你的计算机(计算机A),比如说两个服务器(A和B)不能在某个端口上直接连接,所以想要通过SSH隧道到它们,对吗?

如果是这样的话,您可以在不同的本地端口上使用-L而不是-D从计算机(每个目标服务器)创建两个隧道,然后在监视工具中连接到本地机器(没有代理设置),就像要检查的远程服务器一样。

代码语言:javascript
复制
ssh -L 9000:localhost:<local port jstatd listens on> user@server1
ssh -L 9001:localhost:<local port jstatd listens on> user@server2

然后使用本地监视器连接到localhost:9000和localhost:9001,这些隧道将您连接到目标jstatd。

如果有一个中间服务器,然后有一个两跳隧道,

代码语言:javascript
复制
ssh -L 9000:server1:<local port jstatd listens on> user@bastion-host
ssh -L 9001:server2:<local port jstatd listens on> user@bastion-host

嗯,如果bastion主机可以和所有的JVM对话,那么

代码语言:javascript
复制
ssh -D 9000 user@bastion-host

就足以创建一个socks代理,然后您就可以通过端口9000使用了。

票数 5
EN

Unix & Linux用户

发布于 2016-01-19 06:44:19

最后一步说得足够了:它无法在端口9696开始监听。这是因为如果这是您的第二个隧道,您应该使用另一个端口,而9696正在处理第一个端口。

票数 1
EN
页面原文内容由Unix & Linux提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://unix.stackexchange.com/questions/19242

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档