“Auth échouer” dans jsch-0.1.42 avec Java 1.4.2

J'ai ce simple programme Java qui utilise Jsch pour se connecter à un serveur SFTP.

La connexion échoue avec un "Auth échec" d'exception sur l'île de Java 1.4.2, mais il se connecte parfaitement sur Java 1.7.

try {
    JSch jsch = new JSch();

    jsch.setKnownHosts(KNOWN_HOSTS_PATH);
    jsch.addIdentity(PRIVATE_KEY_PATH, PASSPHRASE);

    Session session = jsch.getSession(USERNAME, HOSTNAME, 22);
    session.connect(2500);

    Channel channel = session.openChannel("shell");
    channel.setInputStream(System. in );
    channel.setOutputStream(System.out);
    channel.connect();
} catch (Exception e) {
    e.printStackTrace(System.err);
}

La clé que j'utilise est une ssh-rsa 4096 bits de la clé. Le .pub fichier de clé existe dans le même répertoire que la clé privée.

Lors de la connexion d'un enregistreur, je vois le message suivant avant de l'exception (qui se produit sur channel.connect();):

INFO: Connexion <rédigé> le port 22 
INFO: Connexion établie 
INFO: version à Distance de la chaîne: SSH-2.0-OpenSSH_5.1p1 Debian-5 
INFO: la version Locale de la chaîne: SSH-2.0-JSCH-0.1.42 
INFO: CheckCiphers: aes256-ctr,aes192-ctr,aes128-ctr,aes256-cbc,aes192-cbc,aes128-cbc,3des-ctr,arcfour,arcfour128,arcfour256 
INFO: arcfour n'est pas disponible. 
INFO: arcfour128 n'est pas disponible. 
INFO: arcfour256 n'est pas disponible. 
INFO: SSH_MSG_KEXINIT envoyé 
INFO: SSH_MSG_KEXINIT reçu 
INFO: kex: serveur->client aes128-ctr hmac-md5 aucun 
INFO: kex: client->serveur aes128-ctr hmac-md5 aucun 
INFO: SSH_MSG_KEXDH_INIT envoyé 
INFO: attend SSH_MSG_KEXDH_REPLY 
INFO: ssh_rsa_verify: signature vrai 
INFO: Accueil " <rédigé>' est connu et mathces le RSA clé d'hôte 
INFO: SSH_MSG_NEWKEYS envoyé 
INFO: SSH_MSG_NEWKEYS reçu 
INFO: SSH_MSG_SERVICE_REQUEST envoyé 
INFO: SSH_MSG_SERVICE_ACCEPT reçu 
INFO: les Authentifications qui peut continuer: publickey,clavier interactif,le mot de passe 
INFO: Suivant la méthode d'authentification: publickey 
INFO: les Authentifications qui peut continuer: mot de passe 
INFO: Suivant la méthode d'authentification: mot de passe 
INFO: Déconnexion <rédigé> le port 22 
com.jcraft.jsch.JSchException: Auth échouer 
au com.jcraft.jsch.Session.connexion(Session.java:452) 
au TestJsch.principale(TestJsch.java:19) 

Lorsque j'exécute le même programme avec Java 1.7, il est dit

INFO: Connexion <rédigé> le port 22 
INFO: Connexion établie 
INFO: version à Distance de la chaîne: SSH-2.0-OpenSSH_5.1p1 Debian-5 
INFO: la version Locale de la chaîne: SSH-2.0-JSCH-0.1.42 
INFO: CheckCiphers: aes256-ctr,aes192-ctr,aes128-ctr,aes256-cbc,aes192-cbc,aes128-cbc,3des-ctr,arcfour,arcfour128,arcfour256 
INFO: SSH_MSG_KEXINIT envoyé 
INFO: SSH_MSG_KEXINIT reçu 
INFO: kex: serveur->client aes128-ctr hmac-md5 aucun 
INFO: kex: client->serveur aes128-ctr hmac-md5 aucun 
INFO: SSH_MSG_KEXDH_INIT envoyé 
INFO: attend SSH_MSG_KEXDH_REPLY 
INFO: ssh_rsa_verify: signature vrai 
INFO: Accueil " <rédigé>' est connu et mathces le RSA clé d'hôte 
INFO: SSH_MSG_NEWKEYS envoyé 
INFO: SSH_MSG_NEWKEYS reçu 
INFO: SSH_MSG_SERVICE_REQUEST envoyé 
INFO: SSH_MSG_SERVICE_ACCEPT receivedINFO: les Authentifications qui peut continuer: publickey,clavier interactif,le mot de passe 
INFO: Suivant la méthode d'authentification: publickey 
INFO: l'Authentification a réussi (publickey). 
Linux <rédigé> 2.6.26-2-amd64 #1 SMP Mon Jun 13 16:29:33 UTC 2011 x86_64 

<server message de bienvenue suit> 

J'ai installé le Java Cryptography Extension (JCE) de la VM 1.4.

Ce qui pourrait être la source de ce problème?

  • avez-vous remarqué qu'il saute le publickey authentification et va tout de suite le mot de passe auth? : Les authentifications qui peut continuer: mot de passe
  • Oui, je l'ai fait. Je n'ai pas d'explication, autre que l'hypothèse qu'une partie de la clé d'authentification échoue silencieusement (par exemple parce que la clé est trop long ou une condition préalable n'a pas été respecté) et il saute à la prochaine méthode sans l'émission d'un avertissement. "Java 1.4 ne prend pas en charge 4096 bits clés car XYZ" est la réponse, je serais prêt à accepter (même si je ne peux vraiment pas imaginer maintenant que cela pourrait être vrai).
  • En regardant les UserAuthPublicKey.java de JSch, il semble que ce processus n'a vraiment émettent que peu de renseignements utiles. Je suggère la compilation JSch à partir de la source, et en ajoutant plus de la sortie de la classe, de sorte que vous ayez une idée de ce qui se passe, où les choses ne.
  • Je pourrais le faire,mais de creuser dans une bibliothèque je sais à côté-à-rien à ce sujet n'a pas vraiment d'attrait pour moi. :/ J'ai vu l'auteur de Jsch autour DONC, j'espérais qu'il allait venir.
  • La recherche sur les JSch source, UserAuthPublicKey.java et IdentityFile.java déjà, comprennent un certain nombre de commenté System.err.println() des niveaux de débogage, alors peut-être tout simplement ré-activation de ceux qui seraient assez pour faire la lumière sur pourquoi (ou au moins où) les choses ne sont pas.
  • Oui, je pense que c'est ce que j'ai à faire. Dommage que je n'obtiendrez pas mon +100 butin si je réponds à ma propre question. 🙂
  • Oui, mais ne vous inquiétez pas. Je suis sûr que si vous appliquez vous-même, alors peut-être qu'un jour, dans un avenir lointain, vous aurez réussi à gagner le plus de ce retour et peut mettre une prime sur une autre question. 🙂
  • En regardant le code source (docjar.com/html/api/com/jcraft/jsch/UserAuthPublicKey.java.html, la ligne 122), il semble qu'il vient de identity.isEncrypted() qui renvoie la valeur true. Par la recherche de l'identité var (constructeur de docjar.com/html/api/com/jcraft/jsch/IdentityFile.java.html), la encrypted est pas défini à false, alors que vous l'avez déjà fait, je soupçonne aussi que le JDK 1.4 ne manipulez pas votre clé RSA.

InformationsquelleAutor Tomalak | 2012-07-10