当前位置: 首页 > 知识库问答 >
问题:

JMX连接被拒绝,仅当链接Jaas Kerberos模块时

鞠建安
2023-03-14

当尝试使用JMX访问暴露的mbean进程时,我遇到以下错误。

java.rmi.ConnectException: Connection refused to host: 10.65.13.201; nested exception is: 
    java.net.ConnectException: Connection refused: connect
    at sun.rmi.transport.tcp.TCPEndpoint.newSocket(TCPEndpoint.java:601)
    at sun.rmi.transport.tcp.TCPChannel.createConnection(TCPChannel.java:198)
    at sun.rmi.transport.tcp.TCPChannel.newConnection(TCPChannel.java:184)
    at sun.rmi.server.UnicastRef.newCall(UnicastRef.java:322)
    at sun.rmi.registry.RegistryImpl_Stub.lookup(Unknown Source)
    at sun.tools.jconsole.ProxyClient.checkSslConfig(ProxyClient.java:217)
    at sun.tools.jconsole.ProxyClient.<init>(ProxyClient.java:110)
    at sun.tools.jconsole.ProxyClient.getProxyClient(ProxyClient.java:463)
    at sun.tools.jconsole.JConsole$3.run(JConsole.java:510)
Caused by: java.net.ConnectException: Connection refused: connect
    at java.net.PlainSocketImpl.socketConnect(Native Method)
    at java.net.PlainSocketImpl.doConnect(PlainSocketImpl.java:351)
    at java.net.PlainSocketImpl.connectToAddress(PlainSocketImpl.java:213)
    at java.net.PlainSocketImpl.connect(PlainSocketImpl.java:200)
    at java.net.SocksSocketImpl.connect(SocksSocketImpl.java:366)
    at java.net.Socket.connect(Socket.java:529)
    at java.net.Socket.connect(Socket.java:478)
    at java.net.Socket.<init>(Socket.java:375)
    at java.net.Socket.<init>(Socket.java:189)
    at sun.rmi.transport.proxy.RMIDirectSocketFactory.createSocket(RMIDirectSocketFactory.java:22)
    at sun.rmi.transport.proxy.RMIMasterSocketFactory.createSocket(RMIMasterSocketFactory.java:128)
    at sun.rmi.transport.tcp.TCPEndpoint.newSocket(TCPEndpoint.java:595)
    ... 8 more

我在Unix服务器上,我正在使用以下命令运行:

java -jar MBeanSecure.jar 
-Dcom.sun.management.jmxremote.access.file=jmxremote.access 
-Dcom.sun.management.jmxremote 
-Dcom.sun.management.jmxremote.port=1234 
-Dcom.sun.management.jmxremote.local.only=false 
-Dcom.sun.management.jmxremote.authenticate=false 
-Dcom.sun.management.jmxremote.ssl=false 
-Djava.security.auth.login.config=jaas-krb5.conf 
-Dcom.sun.management.jmxremote.login.config=client 
-Djava.rmi.server.hostname=10.65.13.201
com.ba.running.RunningImplem

我的主机名-我给我:

$ hostname -i
10.65.13.201

我的所有配置文件都设置为rw0600,因此如下所示:

jaas-krb5.conf
jmxremote.access

它似乎特定于 Jaas 配置设置,因为当我使用以下命令时,我能够运行 jar 并正常访问它:

java -jar 
-Dcom.sun.management.jmxremote.port=1234 
-Dcom.sun.management.jmxremote.password.file=jmxremote.password 
-Dcom.sun.management.jmxremote.ssl=false 
-Dcom.sun.management.jmxremote.access.file=jmxremote.access 
-Dcom.sun.management.jmxremote=true MBeanSecure.jar

然后我可以通过 jconsole 连接而不会出现问题。所以它似乎不是服务器上的配置设置,我相信它是特定于我的 Jaas 登录模块的。

jaas-krb5.conf:

client{
    com.sun.security.auth.module.Krb5LoginModule required;
};
server{
    com.sun.security.auth.module.Krb5LoginModule required
    useKeyTab=false
    storeKey=false
    principal="principal@intranet.com";
};

我还可以确认Krb5LodingModule正在工作并与KDC准确通信。

因此,在启动jar时,JMX似乎存在错误配置,我的问题是这可能是什么?

共有1个答案

周云
2023-03-14

解决:

启动脚本不正确:

java -classpath MBeanSecure.jar 
-Djava.rmi.server.hostname=<hostname>
-Dcom.sun.management.jmxremote=true 
-Dcom.sun.management.jmxremote.port=<port> 
-Dcom.sun.management.jmxremote.local.only=false 
-Dcom.sun.management.jmxremote.authenticate=false 
-Dcom.sun.management.jmxremote.ssl=false 
-Djava.security.auth.login.config=../path/to/jaaskrb5.conf 
-Djava.security.krb5.conf=../path/to/krb5.conf 
-Dcom.sun.management.jmxremote.login.config=client 
-Djava.net.preferIPv4Stack=true 
-Dcom.sun.management.jmxremote.access.file=../path/to/jmxremote.access com.ba.running.RunningImplementation
 类似资料:
  • 我试图通过Jedis客户端连接到redis服务器,但在连接时我得到了以下异常和堆栈跟踪- redisconnectionFailureException:无法获得Jedis连接;嵌套异常是redis.clients.jedis.exceptions.jedisconnectionException:无法从位于org.springframework.data.redis.connection.jed

  • 我正在尝试使用docker容器运行ELK stack。但我得到的错误是,kibana无法与elasticsearch建立联系。 这是我的docker comp的内容 我日志的内容。形态 我有elasticsearch容器和kibana容器上的卷曲,对我来说很好 curl localhost:9200/_cat/index?漂亮的 增加虚拟内存大小后 root@sfbp19:~/docking je

  • 问题内容: 我是 HBase 和 Hadoop的 新手。我已经完全设置了HBase并完美启动。现在,当我尝试使用Java客户端从 p1 连接到HBase(HBase安装在 p2上 )时,它抛出了一个奇怪的异常。 问题答案: 我找到了解决方案。 通过仅从我的 主机中 删除 localhost 条目。现在我的本地主机条目就像 192.169.19.50 [这是我的hbase IP] =本地主机,而不是

  • 问题内容: 我正在尝试实现TCP连接,从服务器端一切正常,但是当我运行客户端程序(从客户端计算机)时,出现以下错误: 我尝试更改套接字号以防万一,但无济于事,有谁知道导致此错误的原因和解决方法。 服务器代码: 客户代码: 问题答案: 此异常意味着你尝试连接的IP /端口上没有侦听服务: 你试图连接到错误的IP /主机或端口。 你尚未启动服务器。 你的服务器没有监听连接。 在Windows服务器上,

  • 我无法连接到RabbitMQ。RabbitMQ不在本地计算机上。 我的应用程序.属性看起来像 我可以使用https://urltologinscreen:15671访问Rabbitmq gui 我得到以下错误 如何解决问题?

  • 我试着让我的selenium测试在debian服务器上运行,但是我一直从我的GeckoDriver得到连接拒绝错误。在运行Ubuntu的本地机器上,它运行得很好。你们谁知道怎么了?我找不到任何有用的东西。 OS:Debian Jessie 构建工具:Gradle Java-版本:8 设置方法 错误信息