So stellen Sie den Host-Schlüssel für die Maven SSH-Verwendung in der Datei server.xml bereit

9

Im Maven settings.xml möchte ich einen SSH Server definieren und folgendes bereitstellen:

  • Der Host, mit dem
  • verbunden werden soll
  • Der Benutzer, mit dem eine Verbindung hergestellt werden soll
  • Der Ort eines privaten Schlüssels (um mich zu authentifizieren)
  • Geben Sie manuell einen Host-Schlüssel (öffentlicher Schlüssel zum Überprüfen des Servers)
  • ein

Ich will nicht:

  • hängt von der Datei ~/.ssh/known_hosts ab
  • muss aufgefordert werden, einen Host-Schlüssel zu akzeptieren
  • ignoriert die Validierung des Hostschlüssels

Daher helfen mir die vorhandenen Antworten auf StackExchange nicht, darunter:

Dies ist ein Beispiel dafür, wie ich es mir im Maven ~/.ssh/known_hosts vorstellen konnte:

%Vor%     
YoYo 31.07.2015, 21:15
quelle

1 Antwort

3

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:

%Vor%

Im Gegensatz dazu ist die Klasse SingleKnownHostProvider nicht definiert mit dem Rollenhinweis file , aber mit dem Rollenhinweis single :

%Vor%

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:

%Vor%

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:

%Vor%

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.

    
Alexandre Fenyo 18.08.2017, 17:53
quelle

Tags und Links