Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/ssh/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java JSchException:身份验证取消_Java_Ssh_Jsch - Fatal编程技术网

Java JSchException:身份验证取消

Java JSchException:身份验证取消,java,ssh,jsch,Java,Ssh,Jsch,我目前在尝试使用JSch将ssh连接到一个框中时发现了这个问题。我已经使用Cygwin测试了连接,它可以无缝连接。我已生成密钥对,并将公钥放入远程服务器上的authorized_keys文件中 下面是日志的摘录 INFO:下一个身份验证方法:公钥 信息:可以继续的身份验证:键盘交互、密码 信息:下一个身份验证方法:键盘交互 信息:可以继续的身份验证:密码 信息:下一个身份验证方法:密码 信息:从xx.xx.xx.xx端口22断开连接 com.jcraft.jsch.JSchException:A

我目前在尝试使用JSch将ssh连接到一个框中时发现了这个问题。我已经使用Cygwin测试了连接,它可以无缝连接。我已生成密钥对,并将公钥放入远程服务器上的
authorized_keys
文件中

下面是日志的摘录

INFO:下一个身份验证方法:公钥
信息:可以继续的身份验证:键盘交互、密码
信息:下一个身份验证方法:键盘交互
信息:可以继续的身份验证:密码
信息:下一个身份验证方法:密码
信息:从xx.xx.xx.xx端口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用户界面的代码

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;
}

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

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

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

当身份验证实现抛出
jschauthcanceleexception
时,会抛出“Auth cancel”。当
UserInfo
实现从其方法之一返回false时,通常会发生什么情况

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


您还编写了关于密钥对的内容,但您的代码并没有显示密钥的任何用途。而是设置一个密码

有关使用JSch的私钥身份验证,请参见示例:

您是否可以编辑您的问题,以包含用于调用jsch建立此连接的代码?如果您使用的是密钥文件,那么密钥文件的名称是什么?很抱歉,我对SSH比较陌生,我相信我使用的密钥有点离题,但仍然很重要:不要将任何密码字符串硬编码到生产二进制文件中。那么您想使用密码或公钥身份验证吗?公钥身份验证就是我要做的。我已将其添加到代码中,它指向相应的密钥,但我仍然有相同的问题
String passphrase = ...;
jsch.addIdentity("C:\users\jdoe\.ssh\id_rsa",
                 passphrase.getBytes());