Domanda

Sto cercando di scrivere uno script Ant per recuperare un URL tramite porta tunneling.

Funziona benissimo quando uso una password (i nomi xxxx'd fuori per la privacy):

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

Ma non funziona quando uso un file di chiavi, in questo modo:

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

ottengo questa eccezione:

/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)
  • Sono sicuro che sto usando il file di chiavi corretta (Ho provato con il nome sbagliato, che dà una FileNotFoundException legittima).
  • posso ssh con successo dalla riga di comando senza che venga richiesto di inserire una password.
  • Sono sicuro che sto utilizzando la passphrase corretta per il file di chiavi.

Qual è la causa di questo errore e che cosa posso fare?

È stato utile?

Soluzione

I debug del codice. Questo è stato in mancanza perché la mia chiave privata stava venendo a mancare l'autenticazione; JSch silenzio ricadde autenticazione della password, che è stato annullato, perché non specificare una password.

la gestione degli errori JSch succhia un sacco. Ritornare sui propri passi, rigenerare un file di chiave privata (separato), l'uso ssh -i per garantire che si sta utilizzando il file giusto, e tenere le dita incrociate.

Altri suggerimenti

Per avere la connessione jsch al lavoro, è necessario specificare i percorsi sia il file known_hosts e al file che contiene la chiave privata. Questo viene fatto usando i metodi setKnownHosts e addIdentity.

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

Se la chiave ha una passphrase, è possibile aggiungerlo alla lista degli argomenti addIdentity:

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

See Javadocs

Ho avuto lo stesso problema durante l'utilizzo compito sshexec. Ho aggiunto attibute passphrase troppo e ha funzionato bene. creare una passphrase per la propria chiave privata e aggiungere questo come un attributo nel vostro compito. Inoltre, non dimenticare di convertire la chiave privata in formato ssh aperta se si è generato la chiave utilizzando PuTTYgen sulle finestre.

Ho avuto un problema simile oggi. Così ho pensato che voglio condividere la mia soluzione pure. Ho avuto la stessa eccezione, ma il problema era nel fatto che ho avuto un dieresi entro la password. dopo aver scelto una nuova password senza di essa tutto ha funzionato bene.

C'è un nuovo fork di JSch fuori ora. La gestione delle eccezioni è molto più completo. Non più a deglutire o inadempiente. Oltre al capo https://github.com/vngx/vngx-jsch di check it out. Se qualcosa non funziona nel modo previsto, si prega di alzare come un problema, o inviare una richiesta di pull come stiamo attivamente il suo mantenimento. Stiamo anche cercando di ottenere in su sui pronti contro termine centrali Maven presto.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top