java - JSch异常: No Configuration was registered named com. sun.security.jgss.krb5.initiate

标签 java ssh jsch jaas

我正在运行此代码,但出现异常。

Session session = null;  
Channel channel = null;  

JSch jsch = new JSch();  
session = jsch.getSession(ftpUserName, ftpHost, ftpPort);  
if (session == null) {  
    throw new Exception("session is null");  
}  
session.setPassword(ftpPassword);  
session.setTimeout(100000);  
session.setConfig("StrictHostKeyChecking", "no");  
session.connect();  

该代码在本地开发环境中运行正常。但是在测试环境部署时报异常。测试环境为linux环境,部署中间件为weblogic11,使用的jdk均为oracle 1.6.45。

Exception:
java.lang.IllegalArgumentException: No Configuration was registered that can handle the configuration named com.sun.security.jgss.krb5.initiate
at com.bea.common.security.jdkutils.JAASConfiguration.getAppConfigurationEntry(JAASConfiguration.java:130)
at sun.security.jgss.LoginConfigImpl.getAppConfigurationEntry(LoginConfigImpl.java:139)
at javax.security.auth.login.LoginContext.init(LoginContext.java:243)
at javax.security.auth.login.LoginContext.<init>(LoginContext.java:499)
at sun.security.jgss.GSSUtil.login(GSSUtil.java:244)
at sun.security.jgss.krb5.Krb5Util.getTicket(Krb5Util.java:136)
at sun.security.jgss.krb5.Krb5InitCredential$1.run(Krb5InitCredential.java:328)
at java.security.AccessController.doPrivileged(Native Method)
at sun.security.jgss.krb5.Krb5InitCredential.getTgt(Krb5InitCredential.java:325)
at sun.security.jgss.krb5.Krb5InitCredential.getInstance(Krb5InitCredential.java:128)
at sun.security.jgss.krb5.Krb5MechFactory.getCredentialElement(Krb5MechFactory.java:106)
at sun.security.jgss.krb5.Krb5MechFactory.getMechanismContext(Krb5MechFactory.java:172)
at sun.security.jgss.GSSManagerImpl.getMechanismContext(GSSManagerImpl.java:209)
at sun.security.jgss.GSSContextImpl.initSecContext(GSSContextImpl.java:195)
at sun.security.jgss.GSSContextImpl.initSecContext(GSSContextImpl.java:162)
at com.jcraft.jsch.jgss.GSSContextKrb5.init(GSSContextKrb5.java:129)
at com.jcraft.jsch.UserAuthGSSAPIWithMIC.start(UserAuthGSSAPIWithMIC.java:135)
at com.jcraft.jsch.Session.connect(Session.java:470)
at com.jcraft.jsch.Session.connect(Session.java:183)
at com.sinosoft.FXQ.util.SftpUtils.downloadSftpFile(SftpUtils.java:57)
at com.sinosoft.FXQ.blackList.action.BLBlackListAction.extractBlackList(BLBlackListAction.java:47)
at com.sinosoft.FXQ.task.DownBlackListDataTask.run(DownBlackListDataTask.java:93)
at java.util.TimerThread.mainLoop(Timer.java:512)
at java.util.TimerThread.run(Timer.java:462)

最佳答案

正如 @Chris 已经回答的,JSch 默认尝试 Kerberos/GSSAPI 身份验证。

由于您似乎不希望这样,请从默认的 JSch 身份验证方法列表 (gssapi-with-mic,publickey) 中删除 Kerberos/GSSAPI (gssapi-with-mic) ,键盘交互,密码):

session.setConfig("PreferredAuthentications", "publickey,keyboard-interactive,password");

关于java - JSch异常: No Configuration was registered named com. sun.security.jgss.krb5.initiate,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46802110/

相关文章:

docker - SSH进入Rhel中的Docker容器

javascript - '类型错误 : Object is not a function' when using tunnel-ssh

java - 为什么 cd 命令不能使用 Java JSch?

java - 计算字符串出现次数和比较次数 (KMP)

ssh - ngrok 隧道到本地主机重新连接问题

java - 如何通过 ssh 在远程机器上运行应用程序?

java - 断开连接后使用 SFTP 下载 InputStream 时 JSch "pipe closed"

java - 调用ArrayList时遇到问题

java - 使用 pinterest 应用程序打开 pinterest 链接(如果存在)- android

java - 如何模拟带注释的类?