带有工作密码的“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,解决了我的问题。
尝试明确添加auth方法,如下所示,因为有时它是必需的:
session.setConfig("PreferredAuthentications", "password");