2009-06-11 5 views
1

Ich habe einen Abschnitt in einem POM, die etwa wie folgt aussieht:Wie man Maven für die Verbindung mit CVS mithilfe der Authentifizierung mit öffentlichen Schlüsseln einrichten kann?

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

ich verwende in der Regel publickey Auth gegen diesen CVS-Server zur Authentifizierung, obwohl es auch mein Passwort akzeptieren soll.

Wenn ich versuche, mvn scm:update, mvn release:prepare oder anderes Maven Ziel zu laufen, die zu diesem scm beinhaltet das Verbinden, bekomme ich folgende Fehler an:

[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) 

(viel mehr von der Stacktrace ....)

Und weiter im stacktrace nach unten:

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) 

Gefolgt von:

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

Ich führe dies auf einem Windows-Rechner, ohne cvs ausführbar auf der PATH. Ich habe meinen öffentlichen Schlüssel unter $HOME/.ssh verfügbar, aber es scheint nicht, als ob cvs/maven/scm es hier lädt - da ich nicht nach dem Schlüsselwort dafür gefragt werde.

Also meine Frage ist ... gibt es etwas Besonderes, das ich mit Maven oder dem SCM/CVS-Provider machen muss, damit es erkennt, wo mein öffentlicher Schlüssel installiert ist oder wie man ihn tatsächlich benutzt? Momentan scheint es nicht so zu sein, als ob es überhaupt benutzt wird, da ich nicht nach seiner Passphrase gefragt werde.

Antwort

2

Also nach dem Debuggen dieses ein bisschen mehr, und Herunterladen des Quellcodes für das Maven-SCM-Provider-CVS-Paket, entdeckte ich, dass die CVS-Bibliothek von diesem Plugin verwendet die leere Zeichenfolge ("") für den Passphrase-Wert Es findet Ihren privaten Schlüssel. Um die richtige Passphrase zu verwenden, erwartet die Bibliothek, dass Sie eine Systemeigenschaft mit dem Schlüsselname maven.scm.cvs.java.ssh.passphrase festlegen.

Also, wenn ich meine scm:status Ziel laufen in etwa so:

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

Ich bin in der Lage zu CVS verbinden.

Gee - Ich wünschte wirklich, das wäre dokumentiert!

+1

nun, es ist jetzt – sal

+0

Auch nachdem ich diese Hürde überwunden habe , das Plugin scheint immer noch Probleme zu haben: "scm: status" hängt einfach. Aus dem Blick in Visualvm, sieht aus wie ein Deadlock. Die Verwendung der cvsnative-Implementierung (unter Windows mit CVSNT) scheint ebenfalls problematisch. UGH. –

+0

Funktioniert einwandfrei ein Linux-Host, aber danke CVS! –

0

Ich löste das, indem ich den Befehl cvs + ssh login von der Konsole aus ausführte, bevor ich maven verwendete. Dies fügte die magischen Zahlen zu $ ​​home/.ssh hinzu, damit die automatische Anmeldung funktioniert.

Wenn dies an einem selbstsignierten Zertifikat liegt, lesen Sie den Code InstallCert darüber, wie das selbstsignierte Zertifikat dem Client hinzugefügt wird. Oder this Beispiel zum Ersetzen des Standard-X509-Vertrauenscodes.

+0

was bedeutet, dass Sie "cvs login" ausgeführt haben? –

+0

Ja, die manuelle Anmeldung hat die richtige Nummer den korrekten .ssh und .cvslogin Dateien hinzugefügt, damit die Automatisierung funktioniert. – sal

+0

Schade, dass mein Server es nicht unterstützt - pserver ist deaktiviert :( –

Verwandte Themen