web-dev-qa-db-fra.com

"com.jcraft.jsch.JSchException: échec d'authentification" avec des mots de passe fonctionnels

En essayant de télécharger le fichier sur notre serveur, je reçois 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 transferFileToReciever 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, car je peux me connecter en utilisant ssh, mais en utilisant JSCh, cela ne fonctionne même pas avec la clé, le nom d'utilisateur et le mot de passe. Utilisation de la clé id_dsa avec Java version "1.6.0_25". Quelle pourrait être l'erreur?

Trouvé une autre question similaire, mais pas la réponse. Merci d'avance.

22
vinay

En traçant la cause première, 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 fonctionnait avec la clé rsa, me faisant regarder en arrière dans mon code.

merci tout le monde.

21
vinay

Si le nom d'utilisateur/mot de passe contient des caractères spéciaux, à l'intérieur de la configuration de chameau, utilisez RAW pour configurer les valeurs comme

  • RAW(se+re?t&23)se+re?t&23 est le mot de passe réel

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

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

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

3
Deepak Singla

Exemple de cas, lorsque j'obtiens un fichier du serveur distant et l'enregistre sur la machine locale
connecteur de boîtier;

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

Trouvé une autre question similaire, mais pas la réponse.

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

Autant que je me souvienne et selon com.jcraft.jsch.JSchException: Auth cancel essayez d'ajouter à la méthode .addIdentity() une phrase secrète. Vous pouvez utiliser "" au cas où vous auriez généré un fichier clé sans un. Une autre source d'erreur est la chaîne d'empreintes digitales. S'il ne correspond pas, vous obtiendrez également un échec d'authentification (cela dépend du serveur cible).

Et enfin ici mon code source de travail - après avoir pu résoudre les tâches d'administration 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
reporter

J'ai également fait face au problème d'échec d'authentification, le problème avec mon code est que j'ai

channelSftp.cd("");

Il l'a changé en

channelSftp.cd(".");

Alors ça marche.

2
Harry

Essayez d'ajouter explicitement la méthode auth comme ci-dessous, car parfois elle est requise:

session.setConfig("PreferredAuthentications", "password");
1
Amit Pawar

dans mon cas, j'utilisais la dépendance ci-dessous

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

et obtenir la même exception d'échec d'authentification, mais la dépendance mise à jour vers la version ci-dessous et le problème sont résolus.

<dependency>
    <groupId>com.jcraft</groupId>
    <artifactId>jsch</artifactId>
    <version>0.1.54</version>
</dependency>
0
Pankaj