Я пытаюсь записать скрипт Ant для получения URL через туннелирование порта.
Это работает отлично, когда я использую пароль (имена xxxx'd для конфиденциальности):
<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>
Я получаю это исключение:
/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)
Какова причина этой ошибки и что я могу делать с этим?
Я отладил код. Это не удалось, потому что мой закрытый ключ не прошел проверку подлинности; JSch молча вернулся к аутентификации по паролю, которая была отменена, потому что я не указал пароль.
Обработка ошибок JSch - отстой. Повторите шаги, заново сгенерируйте (отдельный) файл закрытого ключа, используйте ssh -i
, чтобы гарантировать, что вы используете правильный файл, и держите пальцы скрещенными.