2010-05-25 36 views
15

Bağlantı noktası tüneli yoluyla bir URL almak için bir Ant komut dosyası yazmaya çalışıyorum. Bir keyfile kullandığınızda bu gibicom.jcraft.jsch.JSchException: Kimlik doğrulama

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

Ama çalışmıyor:

<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> 
Ben bir şifre (gizlilik için dışarı xxxx'd isimler) kullandığınızda

O inşaat büyük Ben c kullandığımdan eminim

/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) 
  • :

    Bu durum alıyorum doğru anahtar (yanlış bir isim kullanarak denedim, bu da meşru bir FileNotFoundException veriyor).

  • Parola istenmeden komut satırından başarılı bir şekilde ssh.
  • Eminim, anahtar sözcük için doğru parolayı kullanıyorum.

Bu hatanın nedeni nedir ve bu konuda ne yapabilirim?

+0

Ugh, kaynak indirilen ve JSch nedenini yutar anlaşılmaktadır: anahtar bir parola varsa

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

, sen addIdentity argüman listesine ekleyebilirsiniz JSchAuthCancelException ve sadece "AuthCancel" raporlar. Hata ayıklamak isteyen var mı? –

cevap

30

Kodu ayıklandım. Bu başarısız oldu çünkü özel anahtarım kimlik doğrulama başarısız oldu; JSch, bir parola belirtmediğim için iptal edilen parola kimlik doğrulamasına geri döndü.

JSch hatalarının ele alınması çok sıkıyor. Adımlarınızı geri alın, (ayrı) bir özel anahtar dosyasını yeniden oluşturun, doğru dosyayı kullandığınızdan emin olmak için parmaklarınızı çapraz tutun.

0

Şu anda yeni bir Jsch çatalı var. İstisna işlemi çok daha kapsamlıdır. Artık yutmak ya da yok etmek yok. Kontrol etmek için https://github.com/vngx/vngx-jsch'a gidin. Bir şey beklediğiniz gibi çalışmazsa, lütfen bunu bir sorun olarak kaldırın veya etkin bir şekilde sürdürdüğümüz için bir çekme isteği gönderin. Ayrıca, yakında maven merkezi depoları üzerinde bulmaya çalışıyoruz.

+0

Bu ifade, vngx-jsch'in karınca görevinin yerine koyulmasında bir düşüş olmadığını söyleyen bu konuda yazılanlarla çelişiyor https://github.com/vngx/vngx-jsch/issues/10 – opticyclic

+0

Bu yorum hiçbir şekilde geçerli değil değiştirilmesinin bir düşüş olduğunu öne sürün ... Bir şey beklediğiniz gibi çalışıyorsa, yani JSCH'ye dayanan NOT belgelerine dayanan anlamına gelir. Bu yüzden ilk satır: Artık Jsch'in yeni bir FORK'si var. Sorun tasarlandığı için çalıştığı için kapatıldı. – Scott

3

Sshexec görevini kullanırken aynı sorunu yaşadım. Parola cümleciğini de ekledim ve iyi çalıştı. Özel anahtarınız için bir parola oluşturun ve bunu görevinizdeki bir öznitelik olarak ekleyin. Ayrıca, windows üzerinde puttygen kullanarak anahtarı oluşturduysanız, özel anahtarınızı ssh formatını açmak için dönüştürmeyi unutmayın.

1

Bugün benzer bir sorun yaşadım. Bu yüzden çözümümü paylaşacağımı düşündüm. Aynı istisnayı aldım ama sorun aslında şifremde bir umlaut vardı. olmadan yeni bir şifre seçtikten sonra her şey iyi çalıştı.

5

Çalışmak için jsch bağlantısını almak için, known_hosts dosyasının yollarını ve özel anahtarın bulunduğu dosyayı belirtmeniz gerekir. Bu, setKnownHosts ve addIdentity yöntemleri kullanılarak yapılır.

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

See Javadocs