ant - ejemplos - jsch tunnel
com.jcraft.jsch.JSchException: Auth cancel (5)
Estoy tratando de escribir un script Ant para recuperar una URL a través de un túnel de puerto.
Funciona muy bien cuando uso una contraseña (los nombres xxxx''d para privacidad):
<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>
Pero no funciona cuando uso un archivo de claves, como este:
<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>
Me sale esta excepción:
/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)
- Estoy seguro de que estoy usando el archivo de claves correcto (he intentado usar el nombre incorrecto, lo que da una excepción FileNotFoundException legítima).
- Puedo ssh con éxito desde la línea de comandos sin que me pidan una contraseña.
- Estoy seguro de que estoy usando la contraseña correcta para el archivo de claves.
¿Cuál es la causa de este error y qué puedo hacer al respecto?
Hay una nueva bifurcación de Jsch ahora. El manejo de excepciones es mucho más completo. No más deglución o mora. Dirígete a https://github.com/vngx/vngx-jsch para verificarlo. Si algo no funciona de la manera que usted espera, plantéelo como un problema o envíe una solicitud de extracción ya que lo estamos manteniendo activamente. También estamos buscando ponerlo en los repositorios centrales de Maven pronto.
He depurado el código. Esto estaba fallando porque mi clave privada estaba fallando la autenticación; JSch retrocedió silenciosamente a la autenticación de contraseña, que fue cancelada, porque no especifiqué una contraseña.
El manejo de errores JSch apesta mucho. Vuelva sobre sus pasos, regenere un archivo de clave privada (separado), use ssh -i
para garantizar que está usando el archivo correcto y mantenga los dedos cruzados.
Para que la conexión jsch
funcione, debe especificar las rutas de acceso al archivo known_hosts
y al archivo que contiene la clave privada. Esto se hace usando los métodos setKnownHosts
y addIdentity
.
jsch.setKnownHosts("/path/to/.ssh/known_hosts");
jsch.addIdentity("/path/to/.ssh/id_rsa");
Si la clave tiene una frase de contraseña, puede agregarla a la lista de argumentos addIdentity
:
jsch.addIdentity("/path/to/.ssh/id_rsa", myPassPhrase);
Tuve el mismo problema al usar la tarea sshexec. También agregué frase de contraseña y funcionó bien. cree una frase de contraseña para su clave privada y agregue esto como un atributo en su tarea. Además, no olvide convertir su clave privada para abrir el formato ssh si generó la clave utilizando puttygen en Windows.
Tuve un problema similar hoy. Así que pensé que compartiría mi solución también. Obtuve la misma excepción, pero el problema era, de hecho, que tenía una diéresis dentro de mi contraseña. Después de elegir una nueva contraseña sin ella todo funcionó bien.