java - 如何设置 Maven 使用公钥身份验证与 CVS 连接?

标签 java maven-2 cvs version-control maven-scm

我的 POM 中有一个部分看起来像这样:

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

我通常使用 publickey auth 对此 cvs 服务器进行身份验证,尽管它也应该接受我的密码。

当我尝试运行 mvn scm:updatemvn release:prepare 或涉及连接到此 scm 的任何其他 Maven 目标时,出现以下错误:

[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 计算机上运行此程序,PATH 上没有 cvs 可执行文件。我的公钥确实在 $HOME/.ssh 下可用,但似乎 cvs/maven/scm 并未在此处加载它 - 因为我没有被要求提供它的关键字.

所以我的问题是...我需要对 Maven 或 SCM/CVS 提供程序做些什么特殊的事情才能让它识别我的公钥的安装位置,或者如何实际使用它?目前看来它甚至没有被使用,因为没有提示我输入它的密码。

最佳答案

因此,在进一步调试并下载 maven-scm-provider-cvs 包的源代码后,我发现该插件使用的 CVS 库使用空字符串 ("") 如果找到您的私钥,则获取密码值。要使用正确的密码,该库希望您使用键名 maven.scm.cvs.java.ssh.passphrase 设置系统属性。

所以,如果我像这样运行我的 scm:status 目标:

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

我能够连接到 CVS。

哎呀 - 我真的希望这被记录下来!

关于java - 如何设置 Maven 使用公钥身份验证与 CVS 连接?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/982426/

相关文章:

eclipse - 与 CVS 的连接错误

java - 有没有办法禁用 Safari Webdriver Glass Pane

java - 方法中无法识别 JSoup 导入

maven-2 - 私有(private)内部 Maven 存储库

git - 获取类似于 "git log"命令的 CVS 日志/历史记录?

diff - cvs diff的输出格式

java - 奇怪的 Java Unicode 正则表达式 StringIndexOutOfBoundsException

java - Google App Engine 和存储 API 身份验证错误

eclipse - 在 Maven 构建结束时刷新 eclipse-project

Maven WAR 依赖