2010-05-25 2 views
15

포트 터널링을 통해 URL을 검색하는 Ant 스크립트를 작성하려고합니다. 내가 키 파일을 사용하는 경우 다음과 같이com.jcraft.jsch.JSchException : 인증 취소

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

그러나이 작동하지 않습니다 :

<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> 
내가 암호 (개인 정보 보호를 위해 밖으로 xxxx'd 이름)을 사용하는 경우

그것은 좋은 작품 나는 내가 C를 사용하고 확신

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

    나는이 예외가 orkey keyfile (합법적 인 FileNotFoundException을 제공하는 잘못된 이름을 사용해 보았습니다).

  • 암호를 묻지 않고 명령 줄에서 성공적으로 ssh 할 수 있습니다.
  • 키 파일에 올바른 암호를 사용하고 있습니다.

이 오류의 원인은 무엇이며 어떻게해야합니까?

+0

헉, 나는 소스 다운로드는 Jsch는 이유를 삼킨 것으로 보인다 : 키 암호가있는 경우

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

, 당신은 addIdentity 인수 목록에 추가 할 수 있습니다 JSchAuthCancelException을 호출하고 "AuthCancel"을보고합니다. 아무도 그것을 디버그하고 싶습니까? –

답변

30

코드를 디버깅했습니다. 내 개인 키가 인증에 실패하여 실패했습니다. JSch는 비밀번호를 지정하지 않았기 때문에 암묵적으로 비밀번호 인증으로 되돌아갔습니다.

JSch 오류 처리가 많이 빠릅니다. 단계를 되짚어보고 (별도의) 개인 키 파일을 재생성하고 ssh -i을 사용하여 올바른 파일을 사용하고 있는지 확인하고 손가락을 건드리지 마십시오.

0

Jsch의 새로운 포크가 출시되었습니다. 예외 처리는 훨씬 더 포괄적입니다. 더 이상 삼키거나 불이행하지 마십시오. 그것을 확인하기 위해 https://github.com/vngx/vngx-jsch로 향하십시오. 예상대로 작동하지 않는 항목이있는 경우 문제점으로 제기하거나 적극적으로 유지 보수 요청을 보내십시오. 우리는 곧 Maven Central Repos에서 곧 시작할 것입니다.

+0

이 문은이 문제에 대해 vngx-jsch가 ant 작업 대신 대체되지 않는다는 내용과 모순됩니다 https://github.com/vngx/vngx-jsch/issues/10 – opticyclic

+0

이 의견은 어떤 식 으로든 그것은 대체물로서의 하락이라고 제안합니다. 뭔가가 예상대로 작동하면 JSCH를 기반으로하지 않는 문서를 기반으로 한 수단이라고 말합니다. 그러므로 첫 번째 라인은 Jsch의 새로운 FORK가 있습니다. 이 문제는 설계대로 작동하기 때문에 종료되었습니다. – Scott

3

sshexec 작업을 사용하는 동안 동일한 문제가있었습니다. 나도 passphrase attibute를 추가했다. 그리고 그것은 잘 동작했다. 개인 키에 대한 암호를 작성하여이를 태스크의 속성으로 추가하십시오. 또한 창에서 puttygen을 사용하여 키를 생성 한 경우 개인 키를 ssh 형식으로 변환하는 것을 잊지 마십시오.

1

오늘도 비슷한 문제가있었습니다. 그래서 나는 내 솔루션을 공유 할 것이라고 생각했다. 나는 동일한 예외를 가지고있다. 그러나 문제는 내가 나의 암호 안에 움라우트를 가지고 있었다는 사실이었다. 그것없이 새로운 암호를 선택하면 모든 것이 잘 작동했습니다.

5

jsch 연결을 작동 시키려면 known_hosts 파일과 개인 키가 들어있는 파일의 경로를 지정해야합니다. 이는 setKnownHostsaddIdentity 방법을 사용하여 수행됩니다.

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

See Javadocs