JSch не обнаруживает ключ $ HOME / .ssh / id_rsa publi c - PullRequest
1 голос
/ 24 марта 2020

Я пытаюсь аутентифицироваться на удаленном Git сервере, используя JSch версии 0.1.55 через J Git. С помощью командной строки Git аутентификация работает нормально, но через JSch - нет. Я получаю сообщение об ошибке:

Caused by: org.eclipse.jgit.errors.TransportException: git@REDACTED_HOST:petter/rio.git: Auth fail
    at org.eclipse.jgit.transport.JschConfigSessionFactory.getSession(JschConfigSessionFactory.java:158)
    at org.eclipse.jgit.transport.SshTransport.getSession(SshTransport.java:107)
    at org.eclipse.jgit.transport.TransportGitSsh$SshPushConnection.<init>(TransportGitSsh.java:306)
    at org.eclipse.jgit.transport.TransportGitSsh.openPush(TransportGitSsh.java:143)
    at org.eclipse.jgit.transport.PushProcess.execute(PushProcess.java:127)
    at org.eclipse.jgit.transport.Transport.push(Transport.java:1335)
    at org.eclipse.jgit.api.PushCommand.call(PushCommand.java:137)
    ... 10 more
Caused by: com.jcraft.jsch.JSchException: Auth fail
    at com.jcraft.jsch.Session.connect(Session.java:519)
    at org.eclipse.jgit.transport.JschConfigSessionFactory.getSession(JschConfigSessionFactory.java:112)
    ... 16 more

Моя теория состоит в том, что невозможно найти какие-либо публичные c ключи, основанные на последних строках журнала отладки:

11:07:56.228 [main] DEBUG re.dacted - JSCH: Authentications that can continue: publickey,keyboard-interactive,password
11:07:56.228 [main] DEBUG re.dacted - JSCH: Next authentication method: publickey
11:07:56.295 [main] DEBUG re.dacted - JSCH: Disconnecting from REDACTED_HOST port 22

Я думаю, что это может быть вызвано каким-то странным взаимодействием между JSch и агентом s sh на моем Ma c (я использую gpg-agent). Основываясь на https://gist.github.com/niclasnilsson/038f20bee1bd19e970d59ba35732e262, я попытался создать файл .ssh/config с включенной в него записью '*', и в какой-то момент я получил другую ошибку из класса ключей UserAuthPubli c. Однако, что бы я ни пытался, я не могу вернуться к этой стадии.

Я также попробовал инструкции из https://dzone.com/articles/how-to-authenticate-with-jgit (из c, без жесткого кодирования ключевой фразы, что кажется очень странным делом), но не повезло , Кажется, что даже не доходит до попытки вызова любого из методов в UserInfo.

Я действительно получаю ключ от ssh-add -l. Не уверен, что еще нужно сделать, чтобы попытаться устранить это. Любые указатели будут высоко оценены!

Ответы [ 2 ]

1 голос
/ 24 марта 2020

Конечно, я нашел ответ вскоре после публикации вопроса. :) Отладив, что класс UserAuthPublicKey делал во время аутентификации, я понял, что неправильно понял, как используется класс UserInfo. Используя следующий код Kotlin, я получил его для чтения парольной фразы через терминальное приглашение:

    private val sshSessionFactory = object : JschConfigSessionFactory() {
        override fun configure(hc: OpenSshConfig.Host?, session: Session?) {
            session?.userInfo = object : UserInfo {
                override fun promptPassphrase(p0: String?) = true
                override fun getPassphrase(): String? = passphraseSupplier()
                override fun getPassword(): String? = null
                override fun promptYesNo(p0: String?) = false
                override fun showMessage(message: String?) = Unit
                override fun promptPassword(p0: String?) = false
            }
        }
    }

Мое недопонимание заключалось в том, что означают методы 'promptX' и 'getX'. Кажется, что «prompt» означает «вы поддерживаете запрос пользователя на X» и что если реализация UserInfo для «promptX» возвращает true, то следующий вызов getX должен вернуть правильное значение. Было бы замечательно, если бы некоторые javadoc описывали это, что бы сэкономило мне несколько часов!

1 голос
/ 24 марта 2020

JSch не загружает закрытый ключ автоматически из любого места.

Если вы хотите использовать аутентификацию с открытым ключом c, вам нужно явно указать JSch, какой закрытый ключ использовать.

См. Можем ли мы использовать JSch для S SH обмена данными по ключу?

...