2010-05-25 23 views
15

Estoy tratando de escribir un script Ant para recuperar una URL a través del túnel de puertos.com.jcraft.jsch.JSchException: cancelación de autenticación

Funciona muy bien cuando se utiliza una contraseña (los nombres xxxx'd a cabo por 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 se utiliza un archivo de claves, así:

<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> 

consigo 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 la c orrect keyfile (He intentado usar el nombre incorrecto, que da una FileNotFoundException legítima).
  • Puedo ejecutar satisfactoriamente ssh desde la línea de comandos sin que se me pida una contraseña.
  • Estoy seguro de que estoy usando la frase de contraseña correcta para el archivo de claves.

¿Cuál es la causa de este error y qué puedo hacer al respecto?

+0

Uf, he descargado la fuente y parece que JSCH traga la razón de la JSchAuthCancelException, y solo informa "AuthCancel". ¿Alguien quiere depurarlo? –

Respuesta

30

Depuré el código. Esto estaba fallando porque mi clave privada estaba fallando la autenticación; JSch silenciosamente recurrió a la autenticación de contraseña, que fue cancelada, porque no especifiqué una contraseña.

El manejo de errores JSch es muy malo. Siga sus pasos, vuelva a generar un archivo de clave privada (separado), use ssh -i para garantizar que está utilizando el archivo correcto y cruce los dedos.

0

Hay una nueva horquilla de Jsch ahora. El manejo de excepciones es mucho más completo. No más deglutir o incumplir. Dirígete a https://github.com/vngx/vngx-jsch para verlo. Si algo no funciona de la manera que espera, plantee como problema o envíe una solicitud de extracción ya que la estamos manteniendo activamente. También estamos buscando subir pronto al repositorio central de Maven.

+0

Esta afirmación contradice lo que está escrito sobre este tema que dice que vngx-jsch no es una gota en reemplazo de la tarea ant https://github.com/vngx/vngx-jsch/issues/10 – opticyclic

+0

Este comentario no es de ninguna manera sugieren que se trata de una caída en el reemplazo ... Dice que si algo funciona de la manera esperada, eso significa que se basa en la documentación NO basada en JSCH. De ahí la primera línea: ahora hay un nuevo FORK de Jsch. El problema se cerró porque está funcionando según lo diseñado. – Scott

3

Tuve el mismo problema al usar la tarea sshexec. Agregué el fraseo frase de paso también y funcionó bien. crea una frase de contraseña para tu clave privada y agrégala como un atributo en tu tarea. Además, no olvide convertir su clave privada para abrir el formato ssh si generó la clave usando puttygen en Windows.

1

Tuve un problema similar hoy. Así que pensé que también compartiría mi solución. Obtuve la misma excepción, pero el problema fue que tuve una diéresis dentro de mi contraseña. después de elegir una nueva contraseña sin ella todo funcionó bien.

5

Para que funcione la conexión jsch, debe especificar las rutas 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 llave tiene una frase de contraseña, puede agregarlo a la lista addIdentity argumento:

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

See Javadocs

Cuestiones relacionadas