我的 POM 中有一个部分看起来像这样:
<scm>
<connection>scm:cvs:ext:myhostname:/cvsroot/repo:module_name</connection>
</scm>
我通常使用 publickey auth 对此 cvs 服务器进行身份验证,尽管它也应该接受我的密码。
当我尝试运行 mvn scm:update
、mvn 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/