Как настроить Maven для подключения к CVS с использованием аутентификации с открытым ключом? - PullRequest
1 голос
/ 11 июня 2009

У меня есть раздел в POM, который выглядит примерно так:

<scm>
    <connection>scm:cvs:ext:myhostname:/cvsroot/repo:module_name</connection>
</scm>

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

Когда я пытаюсь запустить mvn scm:update, mvn release:prepare или любую другую цель Maven, связанную с подключением к этой scm, я получаю следующую ошибку:

[INFO] Executing: cmd.exe /X /C "cvs -z3 -f -q update -d"
[INFO] Working directory: C:\Documents and Settings\matt\workspace\projectname
org.netbeans.lib.cvsclient.connection.AuthenticationException: Cannot authenticate. Reason: Publickey authentication failed.
    at org.apache.maven.scm.provider.cvslib.cvsjava.util.ExtConnection.open(ExtConnection.java:136)
    at org.apache.maven.scm.provider.cvslib.cvsjava.util.CvsConnection.connect(CvsConnection.java:166)
    at org.apache.maven.scm.provider.cvslib.cvsjava.util.CvsConnection.processCommand(CvsConnection.java:498)
    at org.apache.maven.scm.provider.cvslib.cvsjava.command.update.CvsJavaUpdateCommand.executeCvsCommand(CvsJavaUpdateCommand.java:53)
    at org.apache.maven.scm.provider.cvslib.command.update.AbstractCvsUpdateCommand.executeUpdateCommand(AbstractCvsUpdateCommand.java:78)
    at org.apache.maven.scm.command.update.AbstractUpdateCommand.executeCommand(AbstractUpdateCommand.java:63)
    at org.apache.maven.scm.command.AbstractCommand.execute(AbstractCommand.java:59)
    at org.apache.maven.scm.provider.cvslib.AbstractCvsScmProvider.executeCommand(AbstractCvsScmProvider.java:750)
    at org.apache.maven.scm.provider.cvslib.AbstractCvsScmProvider.update(AbstractCvsScmProvider.java:348)
    at org.apache.maven.scm.provider.AbstractScmProvider.update(AbstractScmProvider.java:821)
    at org.apache.maven.scm.provider.AbstractScmProvider.update(AbstractScmProvider.java:770)
    at org.apache.maven.scm.manager.AbstractScmManager.update(AbstractScmManager.java:526)
    at org.apache.maven.scm.plugin.UpdateMojo.execute(UpdateMojo.java:89)

(намного больше стековой трассировки ....)

И далее вниз по трассе стека:

Caused by: java.io.IOException: Decrypted PEM has wrong padding, did you specify the correct password?
    at ch.ethz.ssh2.crypto.PEMDecoder.removePadding(PEMDecoder.java:109)
    at ch.ethz.ssh2.crypto.PEMDecoder.decryptPEM(PEMDecoder.java:286)
    at ch.ethz.ssh2.crypto.PEMDecoder.decode(PEMDecoder.java:319)

Далее:

[ERROR] Provider message:
[ERROR] The cvs command failed.
[ERROR] Command output:

Я запускаю это на компьютере с Windows, без исполняемого файла cvs на PATH. У меня есть открытый ключ под $HOME/.ssh, но не похоже, что он загружается здесь cvs / maven / scm - поскольку меня не спрашивают о ключевой фразе для него.

Так что мой вопрос ... есть ли что-то особенное, что мне нужно сделать с Maven или провайдером SCM / CVS, чтобы он узнал, где установлен мой открытый ключ, или как его использовать? В настоящее время кажется, что он даже не используется, поскольку мне не предлагается его пароль.

Ответы [ 2 ]

2 голосов
/ 15 июня 2009

Итак, после еще большей отладки и загрузки исходного кода для пакета maven-scm-provider-cvs я обнаружил, что библиотека CVS, используемая этим плагином, использует пустую строку ("") для значения парольной фразы если он найдет ваш закрытый ключ. Чтобы использовать правильную фразу-пароль, библиотека ожидает установки свойства System с именем ключа maven.scm.cvs.java.ssh.passphrase.

.

Итак, если я выполню свою scm:status цель следующим образом:

mvn scm:status -Dmaven.scm.cvs.java.ssh.passphrase=<my passphrase>

Я могу подключиться к CVS.

Ну и дела - я действительно хотел бы, чтобы это было задокументировано!

0 голосов
/ 12 июня 2009

Я решил эту проблему, выполнив команду cvs + ssh login из консоли перед использованием maven. Это добавило магические числа в $ home / .ssh для автоматического входа в систему.

Если это из-за самозаверяющего сертификата, посмотрите код InstallCert о том, как добавить самоподписанный сертификат в клиент. Или это пример того, как заменить код доверия X509 по умолчанию.

...