如何在`settings.xml`中使用SingleKnownHostProvider?

时间:2013-04-02 21:13:24

标签: maven settings rsa maven-wagon-plugin

我想配置我的Maven settings.xml以包含我们内部存储库的RSA指纹(ID为“internal”)。我在how to ignore the fingerprint找到了一个答案,并在同一个SingleKnownHost中找到了一个名为package的类,其中说“具有已知有线值的Simple KnownHostsProvider”听起来与我想要的完全一样,但是此配置:

<settings xmlns="http://maven.apache.org/SETTINGS/1.0.0"
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xsi:schemaLocation="
        http://maven.apache.org/SETTINGS/1.0.0 http://maven.apache.org/xsd/settings-1.0.0.xsd
    ">
    <!-- http://maven.apache.org/settings.html -->
    <pluginGroups/>
    <servers>
        <server>
            <id>internal</id>
            <username>root</username>
            <password>p4ssw0rd</password>
            <configuration>
                <knownHostsProvider implementation="org.apache.maven.wagon.providers.ssh.knownhost.SingleKnownHostProvider">
                    <hostKeyChecking>yes</hostKeyChecking>
                    <key>81:66:27:b9:15:36:3a:91:ec:66:43:4f:69:a0:ef:c4:b9:15:36</key>
                </knownHostsProvider>
            </configuration>
        </server>
    </servers>      
</settings>

但是我收到了错误:

  

[警告]无法对wagon的内部应用配置org.apache.maven.wagon.providers.ssh.jsch.ScpWagon:ClassNotFoundException:使用'implementation'属性在配置中显式指定的类名:'org.apache无法加载.maven.wagon.providers.ssh.knownhost.SingleKnownHostProvider'

为什么会这样?我正在使用Maven 3.0.4

2 个答案:

答案 0 :(得分:0)

AFAIU,Maven将调用外部SSH命令,就像连接到SCM时一样,例如。 the SVN。为了摆脱连接的提示,我们可能需要使用SSH连接到该主机一次。

#--I'm using CentOS release 5.4.

[my_user]$ ssh MY_USER@MY_HOST
The authenticity of host 'MY_HOST (MY_HOST_IP)' can't be established.
RSA key fingerprint is MY_FINGER_PRINT.
Are you sure you want to continue connecting (yes/no)? yes
Warning: Permanently added 'MY_HOST,MY_HOST_IP' (RSA) to the list of known hosts.

~/.ssh/known_hosts将包含RSA信息,如下例所示: -

MY_HOST,MY_HOST_IP ssh-rsa .....

然后下次,当我们连接到该主机时,没有任何提示。 settings.xml的其余部分应该在Settings Reference:Servers.

提及

我希望这可能有所帮助。

<强>编辑: 关于Windows,请尝试使用PuTTY。有可执行文件可以在没有任何安装的情况下运行。连接步骤如下: -

腻子

  1. 打开PUTTY.exe
  2. 与我们的主人建立联系。
  3. 系统将提示是否保存远程RSA密钥。请保存。
  4. 之后,远程RSA密钥将存储在Windows注册表HKEY_CURRENT_USER\SoftWare\SimonTatham\PuTTY\SshHostKeys

答案 1 :(得分:0)

第一个问题是<key>81:66:27:b9:15:36:3a:91:ec:66:43:4f:69:a0:ef:c4:b9:15:36</key>不是密钥,而是密钥的指纹。所以它无法工作,即使可以这样指定密钥。

要解决此问题,请使用以下内容替换pom.xml中的wagon-ssh扩展工件定义:

<build>
  <extensions>
    <extension>
      <groupId>org.apache.maven.wagon</groupId>
      <artifactId>wagon-ssh</artifactId>
      <version>3.0.1-SINGLE</version>
    </extension>
  </extensions>
</build>

在此处下载并安装此编号为3.0.1-SINGLE的特定版本:https://github.com/AlexandreFenyo/maven-wagon

最后,以这种方式更新settings.xml

<server>
        <id>internal</id>
        <username>root</username>
        <password>p4ssw0rd</password>
        <configuration>
                <hostKey>SERVERNAME HOSTKEY</hostKey>
            </knownHostsProvider>
        </configuration>
</server>

在服务器URL中的scp:之后用主机名替换SERVERNAME。

将HOSTKEY替换为存储SSHd公共RSA密钥的文件的内容(通常是以下文件:/etc/ssh/ssh_host_rsa_key.pub)。