Как использовать SingleKnownHostProvider в `settings.xml`?

Я хочу настроить мой Maven settings.xml содержать отпечаток RSA нашего внутреннего хранилища (с идентификатором "internal"). Я нашел ответ о том, как игнорировать отпечаток пальца, и обнаружил класс с именем SingleKnownHost в том же пакете, который говорит"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>

но я получаю ошибку:

[ПРЕДУПРЕЖДЕНИЕ] Не удалось применить конфигурацию для внутреннего к фургону org.apache.maven.wagon.providers.ssh.jsch.ScpWagon:ClassNotFoundException: имя класса, которое было явно задано в конфигурации с использованием атрибута "реализация": "org.apache.maven.wagon.providers.ssh.knownhost.SingleKnownHostProvider'не может быть загружен

Почему это происходит? Я использую Maven 3.0.4

2 ответа

Решение

AFAIU, Maven будет вызывать внешнюю команду SSH так же, как и при подключении к SCM, например 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 должно быть как упоминание в справочнике настроек: Серверы.

Я надеюсь, что это может помочь.

РЕДАКТИРОВАНИЕ: Что касается Windows, пожалуйста, попробуйте использовать PuTTY. Есть исполняемый файл, который готов к запуску без какой-либо установки. Шаг для подключения следующий: -

PuTTY

  1. Открой PUTTY.exe
  2. Установите связь с нашим хостом.
  3. Система предложит сохранить удаленный ключ RSA или нет. Пожалуйста, сохраните это.
  4. После этого удаленный ключ RSA будет храниться в реестре Windows HKEY_CURRENT_USER\SoftWare\SimonTatham\PuTTY\SshHostKeys

Первая проблема заключается в том, что <key>81:66:27:b9:15:36:3a:91:ec:66:43:4f:69:a0:ef:c4:b9:15:36</key> это не ключ, а отпечаток ключа. Так что это не могло работать, даже если было возможно указать ключ таким образом.

Чтобы решить эту проблему, замените определение артефакта расширения wagon-ssh в своем pom.xml следующим:

<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>

Замените SERVERNAME именем хоста сразу после scp: в URL-адресе сервера.

Замените HOSTKEY содержимым файла, в котором хранится открытый RSA-ключ SSHd (часто это следующий файл: /etc/ssh/ssh_host_rsa_key.pub).

Другие вопросы по тегам