Im Maven settings.xml
möchte ich einen SSH Server definieren und folgendes bereitstellen:
Ich will nicht:
~/.ssh/known_hosts
ab Daher helfen mir die vorhandenen Antworten auf StackExchange nicht, darunter:
NullKnownHostProvider
auf hostKeyChecking
setzen. no
. Dies ist ein Beispiel dafür, wie ich es mir im Maven ~/.ssh/known_hosts
vorstellen konnte:
Dies ist ein häufiges Problem. Sie können viele Leute im Internet finden, die nach einer korrekten Lösung suchen und versuchen, die knownHostsProvider
Implementierung mit einer Instanz von SingleKnownHostsProvider
zu überschreiben, wie Sie in Ihrem Beispiel erklärt haben.
Erstens, warum ist das nicht so einfach:
Wenn die Repository-URL mit scp:
beginnt, sucht Plexus, der von Maven verwendete Komponentenmanager, nach einer Komponente mit der Rolle org.apache.maven.wagon.Wagon
und dem Hinweis scp
und sucht den einzigen, der diesen Anforderungen im aktuellen entspricht Wagenimplementierung (mindestens bis 3.0.1), also der Klasse org.apache.maven.wagon.providers.ssh.jsch.ScpWagon
. Diese Klasse erweitert die Klasse AbstractJschWagon
im selben Paket, und diese letztere Klasse definiert statisch einen file
Rollenhinweis, um eine KnownHostProvider
Instanz auszuwählen.
Daher bewirkt dieser file
-Rollenhinweis, dass Plexus die Klasse FileKnownHostsProvider
verwendet, um ein KnownHostsProvider
-Objekt zu initialisieren, das der ScpWagon
-Instanz gegeben wird. Dies liegt daran, dass die Klasse FileKnownHostsProvider
folgendermaßen am Anfang ihrer Quelldatei definiert ist:
Im Gegensatz dazu ist die Klasse SingleKnownHostProvider
nicht definiert mit dem Rollenhinweis file
, aber mit dem Rollenhinweis single
:
Die Bindung an diese unerwünschte (in Ihrer Situation) FileKnownHostsProvider
ist in der Quelldatei AbstractJschWagon
statisch definiert. Das ist die ganze Schwierigkeit.
Hier ist nun, wie Sie das Problem lösen können:
Verwenden Sie diese Maven-Wagen-Patch-Implementierung hier auf GitHub , indem Sie diese Schritte ausführen:
1- In Ihrem pom.xml
können Sie auf diese Weise eine Maven-Erweiterung definieren:
Beachten Sie, dass Sie möglicherweise eine andere Version als die Version 3.0.1 verwenden.
Wie auch immer, ändern Sie diese Definition durch die spezifische Version 3.0.1-SINGLE:
%Vor% 2- Diese spezielle Version 3.0.1-SINGLE
ist eine Wagon-Version, die ich gepatched habe, um dieses sehr häufige Problem zu lösen, dem ich auch begegnet bin. Es ist nicht auf Maven Central verfügbar, sondern auf GitHub.
Sie müssen es also selbst installieren, zum Beispiel wie folgt:
%Vor% 3- Konfigurieren Sie nun Ihre setup.xml
auf diese Weise:
Alles sollte jetzt wie gewünscht funktionieren: Wenn der in der setup.xml
-Datei definierte Hostschlüssel korrekt ist, wird maven weder den Schlüsselfingerabdruck anzeigen noch Sie bitten, diesen Hostschlüssel zu validieren.
Ich hoffe, das hilft.
Tags und Links maven jsch maven-wagon-plugin