YoY*_*oYo 10 jsch maven maven-wagon-plugin
在Maven中settings.xml,我想定义一个SSH服务器并提供:
我不想:
~/.ssh/known_hosts文件因此,StackExchange上的现有答案对我没有帮助,其中包括:
NullKnownHostProvider和设置hostKeyChecking为no.~/.ssh/known_hosts文件中输入的hostkey.这是我如何设想它可以在maven中设置的一个例子setup.xml:
<servers>
<server>
<id>gitcloud.myserver.net:8001</id>
<username>git</username>
<privateKey>C:/data/home/.ssh/id_rsa</privateKey>
<configuration>
<knownHostsProvider implementation="org.apache.maven.wagon.providers.ssh.knownhost.SingleKnownHostProvider">
<hostKeyChecking>yes</hostKeyChecking>
<contents>codecloud.web.att.com ssh-rsa XXXXA3NvvFakeSSHKEYsdfADA...doLQ==</contents>
</knownHostsProvider>
</configuration>
</server>
</servers>
Run Code Online (Sandbox Code Playgroud)
这是一个常见问题,您可以在 Internet 上找到许多人寻找正确的解决方案,尝试使用 的knownHostsProvider实例覆盖实现SingleKnownHostsProvider,正如您在示例中所解释的那样。
首先,这就是为什么做到这一点并不容易:
当存储库 URL 以 开头时scp:,Maven 使用的组件管理器 Plexus 会查找具有角色org.apache.maven.wagon.Wagon和提示的组件scp,并找到当前 Wagon 实现中唯一符合这些需求的组件(至少到 3.0.1),那是阶级的org.apache.maven.wagon.providers.ssh.jsch.ScpWagon。AbstractJschWagon这个类扩展了同一个包中的类,并且后一个类静态地定义了一个file角色提示来选择一个KnownHostProvider实例。
因此,此file角色提示使 Plexus 使用该类FileKnownHostsProvider来实例化KnownHostsProvider提供给实例的对象ScpWagon。这是因为该类FileKnownHostsProvider在其源文件的开头按以下方式定义:
public class FileKnownHostsProvider
[...]
* @plexus.component role="org.apache.maven.wagon.providers.ssh.knownhost.KnownHostsProvider"
* role-hint="file"
Run Code Online (Sandbox Code Playgroud)
相反,类SingleKnownHostProvider不是用 role-hint 定义的,而是用 role-hint 定义的:filesingle
public class SingleKnownHostProvider
[...]
* @plexus.component role="org.apache.maven.wagon.providers.ssh.knownhost.KnownHostsProvider"
* role-hint="single"
Run Code Online (Sandbox Code Playgroud)
因此,与这个不需要的(在您的情况下)的绑定FileKnownHostsProvider是在AbstractJschWagon源文件中静态定义的。这就是全部的困难。
现在,解决这个问题的方法如下:
通过运行以下步骤,使用GitHub 上提供的Maven wagon 修补实现:
1-在你的 中pom.xml,你可能有一些这样定义的 Maven 扩展:
<build>
<extensions>
<extension>
<groupId>org.apache.maven.wagon</groupId>
<artifactId>wagon-ssh</artifactId>
<version>3.0.1</version>
</extension>
</extensions>
</build>
Run Code Online (Sandbox Code Playgroud)
请注意,您可以使用 3.0.1 以外的其他版本。
无论如何,通过特定版本 3.0.1-SINGLE 更改此定义:
<build>
<extensions>
<extension>
<groupId>org.apache.maven.wagon</groupId>
<artifactId>wagon-ssh</artifactId>
<version>3.0.1-SINGLE</version>
</extension>
</extensions>
</build>
Run Code Online (Sandbox Code Playgroud)
2-这个特定版本3.0.1-SINGLE是我修补的Wagon版本,以解决这个非常常见的问题,我也遇到过。它在 Maven 中心不可用,但在 GitHub 上可用。
因此,您必须自行安装,例如以下方式:
% git clone https://github.com/AlexandreFenyo/maven-wagon.git
% cd maven-wagon
% mvn install
Run Code Online (Sandbox Code Playgroud)
3- 现在,按以下方式配置setup.xml:
<servers>
<server>
<id>gitcloud.myserver.net:8001</id>
<username>git</username>
<privateKey>C:/data/home/.ssh/id_rsa</privateKey>
<configuration>
<hostKey>codecloud.web.att.com ssh-rsa XXXXA3NvvFakeSSHKEYsdfADA...doLQ==</hostKey>
</configuration>
</server>
</servers>
Run Code Online (Sandbox Code Playgroud)
现在一切都应该如您所愿:如果文件中定义的主机密钥setup.xml正确,maven 将不会显示密钥指纹,也不会要求您验证该主机密钥。
希望有帮助。
| 归档时间: |
|
| 查看次数: |
1672 次 |
| 最近记录: |