"com.jcraft.jsch.JSchException: auth fail " с рабочими паролями

при попытке загрузить файл на нашем сервере, я получаю следующее исключение

    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 он не работает даже при наличии ключа, имени пользователя и пароля. Использование ключа id_dsa с версией java "1.6.0_25". В чем может быть ошибка?

нашли другой подобный вопрос, но не ответ. Спасибо предварительно.

6 ответов


отслеживая первопричину, я, наконец, обнаружил, что открытый ключ типа 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() пароль. Вы можете использовать "" в случае, если вы создали файл ключа без него. Другим источником ошибок является строка отпечатков пальцев. Если он не соответствует, вы получите ошибка проверки подлинности (зависит от целевого сервера).

и наконец-то здесь мой рабочий исходный код-после того, как я смог решить уродливые задачи администрирования:

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, проблема с моим кодом в том, что у меня есть

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