J'essaie d'écrire un script Ant pour récupérer une URL via le tunneling de port.
Cela fonctionne très bien lorsque j'utilise un mot de passe (les noms xxxx'd pour la confidentialité):
<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 cela ne fonctionne pas lorsque j'utilise un fichier clé, 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 reçois 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)
Quelle est la cause de cette erreur et que puis-je faire?
J'ai débogué le code. Cela échouait car ma clé privée échouait à l'authentification; JSch est revenu silencieusement à l'authentification par mot de passe, qui a été annulée, car je n'ai pas spécifié de mot de passe.
La gestion des erreurs JSch craint beaucoup. Revenez sur vos pas, régénérez un fichier de clé privée (séparé), utilisez ssh -i
pour garantir que vous utilisez le bon fichier et croisez les doigts.
Pour que la connexion jsch
fonctionne, vous devez spécifier les chemins d'accès aux known_hosts
et vers le fichier contenant la clé privée. Cela se fait à l'aide des méthodes setKnownHosts
et addIdentity
.
jsch.setKnownHosts("/path/to/.ssh/known_hosts");
jsch.addIdentity("/path/to/.ssh/id_rsa");
Si la clé a une phrase secrète, vous pouvez l'ajouter à la liste d'arguments addIdentity
:
jsch.addIdentity("/path/to/.ssh/id_rsa", myPassPhrase);
J'ai eu le même problème lors de l'utilisation de la tâche sshexec. J'ai également ajouté l'attribut de phrase secrète et cela a bien fonctionné. créez une phrase secrète pour votre clé privée et ajoutez-la en tant qu'attribut dans votre tâche. N'oubliez pas non plus de convertir votre clé privée au format ssh ouvert si vous avez généré la clé à l'aide de puttygen sur Windows.
J'ai eu un problème similaire aujourd'hui. J'ai donc pensé partager ma solution également. J'ai eu la même exception mais le problème était en fait que j'avais un tréma dans mon mot de passe. après avoir choisi un nouveau mot de passe sans tout, tout a bien fonctionné.
Il y a maintenant une toute nouvelle fourchette de Jsch. La gestion des exceptions est beaucoup plus complète. Plus de déglutition ou de défaut. Rendez-vous sur https://github.com/vngx/vngx-jsch pour le vérifier. Si quelque chose ne fonctionne pas comme prévu, veuillez le signaler comme un problème ou envoyer une demande d'extraction car nous la maintenons activement. Nous cherchons également à le mettre bientôt sur les dépôts centraux maven.