Подтвердить что ты не робот

"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". Что может быть ошибкой?

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

4b9b3361

Ответ 1

Отслеживая основную причину, я наконец обнаружил, что открытый ключ типа dsa не добавляется к авторизованным ключам на удаленном сервере. Добавление того же сработало для меня.

ssh работал с ключом rsa, заставляя меня оглянуться назад в моем коде.

Спасибо всем.

Ответ 2

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

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

    }

}

Ответ 3

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

Ответ 4

Нашел другой похожий вопрос, но не ответ.

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

Насколько я помню и в соответствии с com.jcraft.jsch.JSchException: отменить отмену попробуйте добавить к методу .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;
}

Ответ 5

Я также сталкиваюсь с проблемой Auth Fail, проблема с моим кодом заключается в том, что у меня есть

channelSftp.cd("");

Он изменил его на

channelSftp.cd(".");

Затем он работает.

Ответ 6

Попробуйте явно добавить метод аутентификации, как показано ниже, потому что иногда это требуется:

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

Ответ 7

в моем случае я использовал ниже зависимости

<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>