使用JSch使用密码进行身份validation时获取“Auth取消”

我正在尝试从Java执行Unix命令。 我正在使用JSch库。

这是我的代码:

try{ Session session = new JSch().getSession("*****", "****", 22); session.setPassword("****"); java.util.Properties config = new java.util.Properties(); config.put("StrictHostKeyChecking", "no"); session.setConfig(config); session.connect(); Channel channel=session.openChannel("exec"); ((ChannelExec)channel).setCommand("pwd"); InputStream in=channel.getInputStream(); byte[] tmp=new byte[1024]; while(in.available()>0){ int i=in.read(tmp, 0, 1024); System.out.print(new String(tmp, 0, i)); } channel.disconnect(); session.disconnect(); }catch(Exception e){ System.out.println(org.apache.commons.lang3.exception.ExceptionUtils.getStackTrace(e)); } 

我一直收到“validation取消”错误。 在我可以执行任何操作之前,我无法登录。

这是所要求的日志:

 INFO: Connecting to ***** port 22 INFO: Connection established INFO: Remote version string: SSH-2.0-6.3.8.79 SSH Tectia Server INFO: Local version string: SSH-2.0-JSCH-0.1.42 INFO: CheckCiphers: aes256-ctr,aes192-ctr,aes128-ctr,aes256-cbc,aes192-cbc,aes128-cbc,3des-ctr,arcfour,arcfour128,arcfour256 INFO: aes256-ctr is not available. INFO: aes192-ctr is not available. INFO: aes256-cbc is not available. INFO: aes192-cbc is not available. INFO: arcfour256 is not available. INFO: SSH_MSG_KEXINIT sent INFO: SSH_MSG_KEXINIT received INFO: kex: server->client aes128-ctr hmac-sha1 none INFO: kex: client->server aes128-ctr hmac-sha1 none INFO: SSH_MSG_KEXDH_INIT sent INFO: expecting SSH_MSG_KEXDH_REPLY INFO: ssh_rsa_verify: signature true WARN: Permanently added '*****' (RSA) to the list of known hosts. INFO: SSH_MSG_NEWKEYS sent INFO: SSH_MSG_NEWKEYS received INFO: SSH_MSG_SERVICE_REQUEST sent INFO: SSH_MSG_SERVICE_ACCEPT received INFO: Authentications that can continue: keyboard-interactive,password INFO: Next authentication method: keyboard-interactive INFO: Disconnecting from **** port 22 com.jcraft.jsch.JSchException: Auth cancel at com.jcraft.jsch.Session.connect(Session.java:451) at com.jcraft.jsch.Session.connect(Session.java:150) at unix.UnixConnect.main(UnixConnect.java:19) 

我究竟做错了什么?

您将键盘交互式身份validation设置为首选身份validation方法(这是默认设置)。

但是,您没有实现凭据提示。 setPassword不是(也不能)用于键盘交互式身份validation。

如果您确实想要使用密码validation,请首选:

 config.put("PreferredAuthentications", "password"); 

不用说:如果你关心安全性,不要使用StrictHostKeyChecking=no