COM.jcraft.jsch.JSchException: Auth cancel

j'essaie d'écrire un script Ant pour récupérer une URL via un tunnel de port.

Il fonctionne très bien lorsque j'utilise un mot de passe (les noms xxxx suite de la vie privée):

<project default="main">
  <target name="main">
    <sshsession host="xxxx"
    username="xxxx"
    password="xxxx">
      <LocalTunnel lport="1080" rhost="xxxx" rport="80"/>
      <sequential>
        <get src="http://localhost:1080/xxxx" dest="/tmp/xxxx"/>
      </sequential>
    </sshsession>
  </target>
</project>

Mais ça ne fonctionne pas lorsque j'utilise un fichier de clés, comme ceci:

    <sshsession host="xxxx"
    username="xxxx"
    keyfile="/Users/xxxx/.ssh/id_dsa"
    passphrase="xxxx">
      <LocalTunnel lport="1080" rhost="xxxx" rport="80"/>
      <sequential>
        <get src="http://localhost:1080/xxxx" dest="/tmp/xxxx"/>
      </sequential>
    </sshsession>

je bénéficier de cette exception:

/tmp/build.xml:8: com.jcraft.jsch.JSchException: Auth cancel
    at com.jcraft.jsch.Session.connect(Session.java:451)
    at com.jcraft.jsch.Session.connect(Session.java:150)
    at org.apache.tools.ant.taskdefs.optional.ssh.SSHBase.openSession(SSHBase.java:223)
  • je suis sûr que j'utilise le bon fichier-clé (j'ai essayé d'utiliser le mauvais nom, ce qui donne un FileNotFoundException légitime).
  • je peux réussir ssh à partir de la ligne de commande sans qu'on lui demande un mot de passe.
  • je suis sûr que j'utilise la bonne phrase de passe pour le fichier-clé.

Quelle est la cause de cette erreur et que puis-je y faire?

16
demandé sur Dan Fabulich 2010-05-25 04:24:24

5 réponses

j'ai débogué le code. Cela a échoué parce que ma clé privée a échoué l'authentification; jsch est retombé silencieusement sur l'authentification par mot de passe, qui a été annulée, parce que je n'ai pas spécifié de mot de passe.

la gestion des erreurs jsch craint beaucoup. Retrace tes pas, régénère un fichier (séparé) clé privée, utilise ssh -i pour garantir que vous utilisez le bon fichier, et gardez vos doigts croisés.

31
répondu Dan Fabulich 2010-05-26 03:11:24

pour obtenir le jsch connexion au travail, vous devez spécifier les chemins vers les deux known_hosts et au fichier contenant la clé privée. Ceci est fait en utilisant l' setKnownHosts et addIdentity méthodes.

        jsch.setKnownHosts("/path/to/.ssh/known_hosts");
        jsch.addIdentity("/path/to/.ssh/id_rsa");

si la clé a une phrase de passe, vous pouvez l'ajouter à la addIdentity liste d'arguments:

        jsch.addIdentity("/path/to/.ssh/id_rsa", myPassPhrase);

Voir Javadocs

5
répondu Oscar Bravo 2014-01-24 10:03:13

j'ai eu le même problème en utilisant la tâche sshexec. J'ai ajouté passphrase attibute aussi et ça a bien fonctionné. créez une phrase de passe pour votre clé privée et ajoutez-la comme attribut dans votre tâche. Aussi, n'oubliez pas de convertir votre clé privée pour ouvrir le format ssh si vous avez généré la clé en utilisant puttygen sur windows.

3
répondu cnu 2011-10-24 21:35:30

j'ai eu un Problème similaire aujourd'hui. Alors j'ai pensé que je partagerais aussi ma solution. J'ai eu la même exception mais le problème était en fait que j'avais un umlaut dans mon mot de passe. après avoir choisi un nouveau mot de passe sans lui tout a bien fonctionné.

1
répondu kukudas 2012-05-11 16:36:29

Il y a une nouvelle marque de la fourche de Jsch maintenant. La gestion des exceptions est beaucoup plus complet. Plus de déglutition ou de défaut. Sur la tête de https://github.com/vngx/vngx-jsch pour le vérifier. Si quelque chose ne fonctionne pas comme vous l'attendez, s'il vous plaît, soulevez-le comme un problème, ou envoyez une demande pull car nous le maintenons activement. Nous cherchons aussi à l'obtenir sur le maven Central repos bientôt.

0
répondu Scott 2011-03-20 01:58:23