Java JSchException:验证取消

时间:2015-05-12 10:10:34

标签: java ssh jsch

我正在尝试使用JSch ssh到一个框中时看到此问题。我已经使用Cygwin测试了连接,并且无缝连接。我已经生成了密钥对,并将公钥放在远程服务器上的authorized_keys文件中。

以下是日志摘录

INFO: Next authentication method: publickey
INFO: Authentications that can continue: keyboard-interactive,password
INFO: Next authentication method: keyboard-interactive
INFO: Authentications that can continue: password
INFO: Next authentication method: password
INFO: Disconnecting from xx.xx.xx.xx port 22
com.jcraft.jsch.JSchException: Auth cancel

用于建立连接的代码

Properties config = new Properties();
config.put("cipher",",aes256-cbc");
config.put("mac.c2s", "hmac-sha2-256");
config.put("KEXs", "diffie-hellman-group1-sha1,diffie-hellman-group14-sha1,diffie-hellman-group-exchange-sha1,diffie-hellman-group-exchange-sha256");
config.put("StrictHostKeyChecking", "no");
Session session = jsch.getSession(username,host,port);
session.setPassword(password);
session.setUserInfo(ui);
session.setConfig(config);
session.getPort();
session.connect();
session.setPortForwardingL(tunnelLocalPort,tunnelRemoteHost,tunnelRemotePort);

以下是UserInfo ui的代码

String password = null;

@Override
public String getPassphrase() {
    return null;
}
@Override
public String getPassword() {
    return password;
}
public void setPassword(String passwd) {
    password = passwd;
}

@Override
public boolean promptPassphrase(String message) {
    return false;
}
@Override
public boolean promptPassword(String message) {
    return false;
}
@Override
public boolean promptYesNo(String message) {
    return false;
}

2 个答案:

答案 0 :(得分:1)

看起来jsch没有尝试使用密钥文件,因为您的代码不会告诉jsch要使用哪个密钥文件。您需要致电Jsch.addIdentity()将一个或多个密钥文件添加到会话中:

jsch.addIdentity("C:\users\jdoe\.ssh\id_rsa");

String passphrase = ...;
jsch.addIdentity("C:\users\jdoe\.ssh\id_rsa",
                 passphrase.getBytes());

如果您想以其他格式提供信息,还有其他种类的addIdentity()功能。

答案 1 :(得分:1)

当身份验证实现抛出JSchAuthCancelException时,将引发“身份验证取消”。当UserInfo实现从其中一个方法返回false时,通常会发生这种情况。

您的代码未显示ui是什么。因此,在向我们展示更多代码之前,我无法提供更多信息。

你也写了关于密钥对,但你的代码没有显示任何密钥的使用。而是设置密码。

使用JSch进行私钥认证时请参阅:
Can we use JSch for SSH key-based communication?