"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.
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.
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();
}
}
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;
}
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.
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)
oùse+re?t&23
mot de passeRAW({abc.ftp.password})
où{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.
essayez d'ajouter la méthode auth explicitement comme ci-dessous, parce que parfois elle est requise:
session.setConfig("PreferredAuthentications", "password");