带有工作密码的“com.jcraft.jsch.JSchException:Auth fail”

在尝试将文件上传到我们的服务器时,我收到以下exception

com.jcraft.jsch.JSchException: Auth fail at com.jcraft.jsch.Session.connect(Session.java:464) at com.jcraft.jsch.Session.connect(Session.java:158) at FtpService.transferFileToReciever(FtpService.java:80) at FtpService.transferFileToReciever(FtpService.java:54) at FtpService.transferFileToRecievers(FtpService.java:44) at FtpService.transferSingeFile(FtpService.java:241) at FtpService.main(FtpService.java:26) Auth fail 

源文件中函数transferFileToReciever的部分是

  JSch jsch = new JSch(); jsch.addIdentity("/root/.ssh/id_dsa"); Session session = jsch.getSession(username, host, 22); session.setUserInfo(serverinfo); session.connect(); //geting exception here boolean ptimestamp = true; 

密码正常,因为我可以使用ssh登录,但是使用JSCh它甚至不提供密钥,用户名和密码。 使用带有java版本“1.6.0_25”的id_dsa密钥。 可能是什么错误?

发现其他类似的问题,但不是答案。 提前致谢。

跟踪根本原因,我终于发现dsa类型的公钥未添加到远程服务器上的授权密钥。 附加相同的工作对我来说。

ssh正在使用rsa密钥,导致我回顾我的代码。

感谢大家。

示例,当我从远程服务器获取文件并将其保存在本地计算机中时
封装连接器;

 import java.io.File; import java.io.FileNotFoundException; import java.io.FileOutputStream; import java.io.IOException; import java.io.InputStream; import com.jcraft.jsch.ChannelSftp; import com.jcraft.jsch.JSch; import com.jcraft.jsch.JSchException; import com.jcraft.jsch.Session; import com.jcraft.jsch.SftpException; public class Main { public static void main(String[] args) throws JSchException, SftpException, IOException { // TODO Auto-generated method stub String username = "XXXXXX"; String host = "XXXXXX"; String passwd = "XXXXXX"; JSch conn = new JSch(); Session session = null; session = conn.getSession(username, host, 22); session.setPassword(passwd); session.setConfig("StrictHostKeyChecking", "no"); session.connect(); ChannelSftp channel = null; channel = (ChannelSftp)session.openChannel("sftp"); channel.connect(); channel.cd("/tmp/qtmp"); InputStream in = channel.get("testScp"); String lf = "OBJECT_FILE"; FileOutputStream tergetFile = new FileOutputStream(lf); int c; while ( (c= in.read()) != -1 ) { tergetFile.write(c); } in.close(); tergetFile.close(); channel.disconnect(); session.disconnect(); } } 

发现其他类似的问题,但不是答案。

知道你在哪里找到这个问题会很有趣。

据我所知 ,根据com.jcraft.jsch.JSchException:Auth取消尝试添加方法.addIdentity()一个密码。 如果生成没有密钥文件的密钥文件,则可以使用"" 。 另一个错误来源是指纹字符串。 如果不匹配,您将获得身份validation失败(取决于目标服务器)。

最后,我的工作源代码 – 在我能够解决丑陋的管理任务之后:

 public void connect(String host, int port, String user, String pwd, String privateKey, String fingerPrint, String passPhrase ) throws JSchException{ JSch jsch = new JSch(); String absoluteFilePathPrivatekey = "./"; File tmpFileObject = new File(privateKey); if (tmpFileObject.exists() && tmpFileObject.isFile()) { absoluteFilePathPrivatekey = tmpFileObject.getAbsolutePath(); } jsch.addIdentity(absoluteFilePathPrivatekey, passPhrase); session = jsch.getSession(user, host, port); //Password and fingerprint will be given via UserInfo interface. UserInfo ui = new UserInfoImpl(pwd, fingerPrint); session.setUserInfo(ui); session.connect(); Channel channel = session.openChannel("sftp"); channel.connect(); c = (ChannelSftp) channel; } 

我也遇到了Auth Fail问题,我的代码问题就是我的问题

 channelSftp.cd(""); 

它改为

 channelSftp.cd("."); 

然后它工作。

如果用户名/密码包含任何特殊字符,则在camel配置中使用RAW配置值

  • RAW(se+re?t&23)其中se+re?t&23是实际密码

  • RAW({abc.ftp.password})其中{abc.ftp.password}值来自spring属性文件。

通过使用RAW,解决了我的问题。

http://camel.apache.org/how-do-i-configure-endpoints.html

尝试明确添加auth方法,如下所示,因为有时它是必需的:

 session.setConfig("PreferredAuthentications", "password");