2009-06-11 69 views
1

我有一個POM一節,看起來是這樣的:如何設置Maven使用公鑰認證連接CVS?

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

我通常使用公鑰驗證機制來認證對這個CVS服務器,儘管它應該接受我的密碼。

當我嘗試運行mvn scm:updatemvn 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在這裏加載 - 因爲我沒有被要求輸入keyphrase。

所以我的問題是...有什麼特別的,我需要與Maven或SCM/CVS提供商做的就是它認識到在我的公共密鑰安裝,或如何實際使用它?目前它似乎並未被使用,因爲我沒有被提示輸入密碼。

回答

2

因此,經過多次調試並下載maven-scm-provider-cvs包的源代碼後,我發現該插件使用的CVS庫使用空字符串("")作爲密碼值if它找到你的私鑰。要使用正確的密碼短語,庫希望您使用密鑰名稱maven.scm.cvs.java.ssh.passphrase設置System屬性。

所以,如果我跑我scm:status目標像這樣:

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

我能夠連接到CVS。

哎呀 - 我真的希望這是記錄在案!

0

我通過使用行家之前從控制檯執行CVS + ssh登錄命令解決了這個。這將魔術數字添加到$ home/.ssh以使自動登錄工作。

如果這是因爲自簽名證書的,看看如何將自簽名證書添加到客戶端的InstallCert代碼。或者this關於如何替換默認的X509 Trust代碼的例子。

+0

這意味着你運行「cvs登錄」? – 2009-06-12 14:45:29

+0

是的,手動登錄將幻數添加到正確的.ssh和.cvslogin文件中以使自動工作。 – sal 2009-06-12 15:12:59