【问题标题】:How to use the SingleKnownHostProvider in the `settings.xml`?如何在 `settings.xml` 中使用 SingleKnownHostProvider?
【发布时间】:2013-03-24 08:38:42
【问题描述】:

我想配置我的 Maven settings.xml 以包含我们内部存储库的 RSA 指纹(ID 为“internal”)。我在how to ignore the fingerprint 上找到了答案,并在同一个package 中找到了一个名为SingleKnownHost 的类,上面写着“具有已知有线值的简单 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:使用“实现”属性在配置中明确给出的类名:“org.apache” .maven.wagon.providers.ssh.knownhost.SingleKnownHostProvider' 无法加载

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

【问题讨论】:

  • 看来您的SingleKnownHostProvider 可能不是一个完整的实现,仍然需要工作。也许它是完整的,但我绝对找不到太多文档。源代码给我留下了hostKeyChecking 属性的线索,但没有告诉我如何手动添加主机密钥条目。我很想看到后续行动。

标签: maven settings rsa maven-wagon-plugin


【解决方案1】:

AFAIU,Maven 会像连接 SCM 一样调用外部 SSH 命令,例如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

【讨论】:

  • 好吧,我在 Windows 上,我的 SCM 是 Perforce,所以知道该怎么做吗?
  • 这似乎不是对“如何向 server.xml 添加单个指纹”和“为什么他不能使用 SingleKnownHostProvider”问题的直接答案。我对这些问题的答案非常感兴趣。
【解决方案2】:

第一个问题是&lt;key&gt;81:66:27:b9:15:36:3a:91:ec:66:43:4f:69:a0:ef:c4:b9:15:36&lt;/key&gt;不是钥匙而是钥匙的指纹。因此,即使可以通过这种方式指定密钥,它也无法正常工作。

要解决此问题,请将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)。

【讨论】:

    猜你喜欢
    • 2023-04-04
    • 2020-08-31
    • 2017-02-12
    • 2019-03-26
    • 2020-06-05
    • 2018-09-01
    • 2012-04-16
    • 2021-12-15
    • 1970-01-01
    相关资源
    最近更新 更多