"COM.jcraft.jsch.JSchException: Auth fail " avec les mots de passe de travail

Tout en essayant de télécharger le fichier sur notre serveur, j'obtiens l'exception suivante

    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

la partie de la fonction transferfiletorecever à partir du fichier source est

        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;

les mots de passe fonctionnent, puisque je peux me connecter en utilisant ssh, mais en utilisant JSCh il ne fonctionne même pas fourni avec la clé, le nom d'utilisateur et le mot de passe. Utiliser la clé id_dsa avec la version java "1.6.0_25". Ce qui pourrait être l'erreur?

J'ai trouvé une autre question semblable, mais pas la réponse. Grâce à avance.

17
demandé sur vinay 2013-06-17 17:39:07

6 réponses

en traçant la cause racine, j'ai finalement trouvé que la clé publique de type dsa n'est pas ajoutée aux clés autorisées sur le serveur distant. Ajouter la même chose a fonctionné pour moi.

le ssh travaillait avec la clé rsa, ce qui m'a fait regarder en arrière dans mon code.

merci à tous.

17
répondu vinay 2016-12-01 11:47:24

exemple de cas, quand je reçois le fichier du serveur distant et le sauve dans la machine locale

connecteur de paquet;

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
répondu Vladimir Azarov 2014-09-29 10:51:14

J'ai trouvé une autre question semblable, mais pas la réponse.

Il aurait été intéressant de savoir où vous avez trouvé cette question.

d'Aussi loin que je me souvienne, et selon com.jcraft.jsch.Jschexception: Auth cancel essayez d'ajouter à la méthode .addIdentity() une phrase de passe. Vous pouvez utiliser "" dans le cas où vous avez généré une clé sans un. Une autre source d'erreur est la chaîne d'empreintes digitales. Si elle ne correspond pas, vous obtiendrez un échec d'authentification soit (dépend du serveur cible).

et enfin voici mon code source de travail-après que j'ai pu résoudre les tâches administratives laides:

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;
}
2
répondu reporter 2017-05-23 11:54:43

j'ai aussi face à la question Auth Fail, le problème avec mon code est que j'ai

channelSftp.cd("");

Il a changé

channelSftp.cd(".");

alors ça marche.

2
répondu Harry 2015-04-29 05:46:22

si le nom d'utilisateur / mot de passe contient des caractères spéciaux alors dans la configuration de camel utilisez RAW pour configurer les valeurs comme

  • RAW(se+re?t&23)se+re?t&23 mot de passe

  • RAW({abc.ftp.password}){abc.ftp.password} les valeurs proviennent d'un fichier de propriétés de printemps.

en utilisant RAW, j'ai résolu mon problème.

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

1
répondu Deepak Singla 2017-12-12 11:55:57

essayez d'ajouter la méthode auth explicitement comme ci-dessous, parce que parfois elle est requise:

session.setConfig("PreferredAuthentications", "password");
0
répondu Amit Pawar 2018-04-13 12:08:02