Java &引用;com.jcraft.jsch.JSchException:Auth fail“;使用工作密码
在尝试将文件上载到服务器时,我遇到以下异常Java &引用;com.jcraft.jsch.JSchException:Auth fail“;使用工作密码,java,jsch,Java,Jsch,在尝试将文件上载到服务器时,我遇到以下异常 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:
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密钥。
可能是什么错误
找到了其他类似的问题,但没有找到答案。
提前谢谢
找到了其他类似的问题,但没有找到答案
如果你知道你在哪里发现了这个问题,那会很有趣
据我记忆所及
尝试向方法.addIdentity()
添加密码短语。如果生成的密钥文件没有密钥文件,则可以使用“
”。
另一个错误源是指纹字符串。如果不匹配,您也将获得身份验证失败(取决于目标服务器)
最后这里是我的工作源代码——在我能够解决难看的管理任务之后:
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;
}
追踪根本原因,我最终发现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();
}
}
我还面临身份验证失败的问题,我的代码的问题是
channelSftp.cd("");
改成
channelSftp.cd(".");
然后它就会工作。如果用户名/密码包含任何特殊字符,那么在camel配置中使用RAW来配置如下值
其中RAW(se+re-t&23)
是实际密码se+re-t&23
其中RAW({abc.ftp.password})
值来自spring属性文件{abc.ftp.password}
尝试按如下方式显式添加auth方法,因为有时需要它:
session.setConfig("PreferredAuthentications", "password");
在我的例子中,我使用了下面的依赖项
<dependency>
<groupId>com.jcraft</groupId>
<artifactId>jsch</artifactId>
<version>0.1.42</version>
</dependency>
com.jcraft
jsch
0.1.42
获得相同的Auth fail异常,但将依赖项更新到以下版本,问题得到解决
<dependency>
<groupId>com.jcraft</groupId>
<artifactId>jsch</artifactId>
<version>0.1.54</version>
</dependency>
com.jcraft
jsch
0.1.54
你确定你的java程序可以找到并读取密钥文件吗?是的,以超级用户身份运行该程序。>id_dsa不应该是id_rsa吗?通过谷歌搜索确切的例外情况,出现的链接是我会尝试一下,并让你知道:)如果我能回答这个问题,我会给你一笔奖金!我认为只有公钥应该添加到授权密钥中,而不是私钥。向所有人致敬:(感谢您对这一由来已久的问题发表的评论,期待您的编辑。请发表意见,让stackoverflow变得更好,而不是批评。@AjayLohani