31

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

    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 键。可能是什么错误?

找到其他类似的问题,但没有答案。提前致谢。

4

7 回答 7

29

追根溯源,我终于发现远程服务器上的授权密钥中没有添加类型为 dsa 的公钥。附加同样对我有用。

ssh 正在使用 rsa 密钥,这让我回顾了我的代码。

感谢大家。

于 2013-06-18T06:56:12.123 回答
4

I have also face the Auth Fail issue, the problem with my code is that I have

channelSftp.cd("");

It changed it to

channelSftp.cd(".");

Then it works.

于 2015-04-29T05:43:19.130 回答
4

尝试如下显式添加 auth 方法,因为有时它是必需的:

session.setConfig("PreferredAuthentications", "password");
于 2018-04-13T11:36:03.377 回答
3

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

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();   

    }

}
于 2014-09-29T10:51:14.463 回答
3

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

  • RAW(se+re?t&23)se+re?t&23实际密码在哪里

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

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

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

于 2017-12-12T10:58:48.290 回答
2

找到其他类似的问题,但没有答案。

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

据我所记得并根据com.jcraft.jsch.JSchException: Auth cancel 尝试向方法添加.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;
}
于 2013-06-17T14:33:20.610 回答
0

就我而言,我使用的是以下依赖项

<dependency>
    <groupId>com.jcraft</groupId>
    <artifactId>jsch</artifactId>
    <version>0.1.42</version>
</dependency> 

并获得相同的 Auth 异常失败,但更新了对以下版本的依赖关系,问题得到解决。

<dependency>
    <groupId>com.jcraft</groupId>
    <artifactId>jsch</artifactId>
    <version>0.1.54</version>
</dependency>
于 2019-06-19T07:55:01.867 回答