com.jcraft.jsch.JSchException: авторизация отмены - PullRequest
19 голосов
/ 25 мая 2010

Я пытаюсь написать скрипт 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)
  • Я уверен, что использую правильный файл ключа (я пытался использовать неправильное имя, которое дает законное исключение FileNotFoundException).
  • Я могу успешно выполнить ssh из командной строки без запроса пароля.
  • Я уверен, что использую правильную фразу-пароль для ключевого файла.

В чем причина этой ошибки и что я могу с этим сделать?

Ответы [ 5 ]

35 голосов
/ 26 мая 2010

Я отладил код. Это сбой, потому что мой закрытый ключ не проходил аутентификацию; JSch молча вернулся к аутентификации по паролю, которая была отменена, потому что я не указал пароль.

Обработка ошибок JSch - отстой. Восстановите ваши шаги, восстановите (отдельный) файл личного ключа, используйте ssh -i, чтобы гарантировать, что вы используете правильный файл, и держите пальцы скрещенными.

5 голосов
/ 24 января 2014

Чтобы заставить работать соединение jsch, необходимо указать пути как к файлу known_hosts, так и к файлу, содержащему закрытый ключ. Это делается с использованием методов setKnownHosts и addIdentity.

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

Если ключ имеет парольную фразу, вы можете добавить его в список аргументов addIdentity:

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

См. Javadocs

3 голосов
/ 25 октября 2011

У меня была такая же проблема при использовании задачи sshexec. Я добавил фразу Attibute тоже, и она работала нормально. создайте фразу-пароль для вашего закрытого ключа и добавьте ее в качестве атрибута в вашу задачу. Также не забудьте преобразовать свой закрытый ключ в открытый формат ssh, если вы сгенерировали ключ, используя puttygen для windows.

1 голос
/ 11 мая 2012

У меня была похожая проблема сегодня. Я подумал, что поделюсь своим решением. Я получил то же исключение, но проблема была в том, что у меня в пароле был умляут. после выбора нового пароля без него все работало нормально.

0 голосов
/ 20 марта 2011

Сейчас есть новая вилка Jsch. Обработка исключений гораздо более полная. Нет больше глотания или дефолта. Отправляйтесь на https://github.com/vngx/vngx-jsch, чтобы проверить это. Если что-то не работает так, как вы ожидаете, поднимите это как проблему или отправьте запрос на удаление, поскольку мы активно поддерживаем его. Мы также надеемся в скором времени разместить его на центральных репозиториях Maven.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...