“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
deJSch
, 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), laencrypted
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.
Vous devez vous connecter pour publier un commentaire.
Java a une limitation pour l'utilisation de fortes algorithme de chiffrement. Vérifier le contenu de
$JRE_HOME/lib/security/US_Export_policy.jar
et$JRE_HOME/lib/security/local_policy.jar
. Si vous trouvez quelque chose comme ceci:Décision est de télécharger et d'installer JCE Force Illimitée de la Compétence Politique. Auparavant, il était situé sur les Chaises du site, maintenant je ne sais pas où il peut être trouvé.
Vous pouvez en lire plus dans cet article
EDIT:
Après quelques recherches, j'ai trouvé ma réponse était incorrecte.
Java 1.4 ne prend pas en charge les clés RSA de plus de 2048 octets de longueur BUG 4524097
jce1_2_2.jar
fichier à lajre/lib/ext
répertoire de la machine virtuelle Java et fait en sorte que la stratégie de sécurité locale permet l'accès à ce fichier. Je pense que c'était inutile puisquesunjce_provider.jar
existait déjà et apparemment contient les algorithmes de chiffrement, afin de Java 1.4 il n'est pas nécessaire d'installer une bibliothèque. Comme prévu, l'ajout de la JCE 1.2 bibliothèque trouvai rien. L'erreur est toujours là.Mes problèmes avec jsch ont été autour des autorisations. Je voudrais donc prendre les mesures suivantes pour les éliminer comme des problèmes
des clés générées.
À défaut de télécharger le code source et l'étape s'il en une session de débogage.
.class
fichier dans une autre VM. Strictement parlant, cela rend le point 4 obsolètes ainsi.Avez-vous essayé d'utiliser une ouverture de clé SSH? jsch utilise Open SSH les principaux formats. Vous pouvez convertir votre existant à un Open SSH format. C'est comment: Utiliser de mastic keygen et charger votre clé existante. Vous pouvez être invité à entrer votre mot de passe pour le décrypter. Après cela, cliquez sur les conversions option ci-dessus et choisissez la fonction "Exporter OpenSSH Clé". Utilisez cette nouvelle clé générée dans votre programme ci-dessus. Espérons que cette aide.
Ce code fonctionne très bien...