![Windows kinit kerberos 连接因 ICMP 端口不可达而失败](https://linux22.com/image/730631/Windows%20kinit%20kerberos%20%E8%BF%9E%E6%8E%A5%E5%9B%A0%20ICMP%20%E7%AB%AF%E5%8F%A3%E4%B8%8D%E5%8F%AF%E8%BE%BE%E8%80%8C%E5%A4%B1%E8%B4%A5.png)
我正在尝试使用 keytab 连接到 kerberos 服务器:
kinit -k -t securitytest.keytab [email protected]
Exception: ICMP Port Unreachable
java.net.PortUnreachableException: ICMP Port Unreachable
at java.base/java.net.DualStackPlainDatagramSocketImpl.socketReceiveOrPeekData(Native Method)
at java.base/java.net.DualStackPlainDatagramSocketImpl.receive0(DualStackPlainDatagramSocketImpl.java:124)
at java.base/java.net.AbstractPlainDatagramSocketImpl.receive(AbstractPlainDatagramSocketImpl.java:181)
at java.base/java.net.DatagramSocket.receive(DatagramSocket.java:814)
at java.security.jgss/sun.security.krb5.internal.UDPClient.receive(NetClient.java:205)
at java.security.jgss/sun.security.krb5.KdcComm$KdcCommunication.run(KdcComm.java:404)
at java.security.jgss/sun.security.krb5.KdcComm$KdcCommunication.run(KdcComm.java:364)
at java.base/java.security.AccessController.doPrivileged(Native Method)
at java.security.jgss/sun.security.krb5.KdcComm.send(KdcComm.java:348)
at java.security.jgss/sun.security.krb5.KdcComm.sendIfPossible(KdcComm.java:253)
at java.security.jgss/sun.security.krb5.KdcComm.send(KdcComm.java:229)
at java.security.jgss/sun.security.krb5.KdcComm.send(KdcComm.java:200)
at java.security.jgss/sun.security.krb5.KrbAsReqBuilder.send(KrbAsReqBuilder.java:326)
at java.security.jgss/sun.security.krb5.KrbAsReqBuilder.action(KrbAsReqBuilder.java:371)
at java.security.jgss/sun.security.krb5.internal.tools.Kinit.acquire(Kinit.java:248)
at java.security.jgss/sun.security.krb5.internal.tools.Kinit.<init>(Kinit.java:134)
at java.security.jgss/sun.security.krb5.internal.tools.Kinit.main(Kinit.java:96)
现在我确实尝试完全关闭 Windows 防火墙,并在 krb5.ini 中设置 kdc 的端口 88,正如一些人暗示的那样,但这没有帮助。远程登录 kdc 地址的端口有效。从 java 1.8 更新到 1.11,仍然是同样的问题。
如果我使用 kerberos gui 中的主体名称和密码进行连接,它就可以正常工作。使用 tab 文件的 kinit 连接可以在 mac 和 linux 机器上运行。
有没有什么办法可以解决这个问题?
答案1
在windows环境下,kinit.exe也存在于JDK的安装目录中,请确保你使用的kinit.exe位于kerberos的安装目录中。