Сервер конфигурации загрузки Spring с использованием репозитория GitHub и входа по SSH

#git #spring-boot #ssh

#git #spring-boot #ssh

Вопрос:

Я пытался настроить сервер конфигурации в Spring Boot, для которого конфигурация будет обслуживаться из частного репозитория Github. Ранее конфигурация с именем пользователя и паролем хорошо работала для того же самого.

Как и в моем файле application.properties, я мог бы просто предоставить следующие детали:

 spring:
  cloud:
    config:
      server:
        git:
          uri: https://github.com/spring-cloud-samples/config-repo
          username: trolley
          password: strongpassword
 

Но, используя ту же конфигурацию, я получил электронное письмо от GitHub, в котором говорится, что аутентификация на основе имени пользователя и пароля устарела.
Вы можете посмотреть эту ссылку для получения более подробной информации об этом. Требования к аутентификации токенов для операций Git

Итак, я приступил к аутентификации на основе SSH. Я следовал руководству GitHub по созданию пары открытого и закрытого ключей и успешно добавил ее в свой репозиторий git. Вот ссылка на подключение к GitHub с помощью SSH

После этого я попробовал свое SSH-соединение, используя свой закрытый ключ, и получил успешный ответ.

 Hi ankur19030! You've successfully authenticated, but GitHub does not provide shell access
 

Итак, это означает, что моя настройка подключения к GitHub с открытыми и закрытыми ключами завершена. Все, что осталось, это настроить свойства загрузки spring в приложении.yml-файл в spring boot
Вот моя конфигурация для того же:

 spring:
  cloud:
    config:
      server:
        git:
          uri: git@github.com:ankur19030/cosylab_config.git
          ignoreLocalSshSettings: true
          privateKey: |
                         -----BEGIN OPENSSH PRIVATE KEY-----
                         MY SSH PRIVATE KEY
                         -----END OPENSSH PRIVATE KEY-----
 

Теперь я получаю следующую ошибку при загрузке spring:

   Description:

Binding to target org.springframework.boot.context.properties.bind.BindException: Failed to bind properties under 'spring.cloud.config.server.git' to org.springframework.cloud.config.server.environment.MultipleJGitEnvironmentProperties failed:

    Reason: Property 'spring.cloud.config.server.git.privateKey' is not a valid private key


Action:

Update your application's configuration
 

Я не понимаю, почему закрытый ключ отображается как недействительный, когда я успешно протестировал ssh-соединение на терминале, используя тот же ключ.

Ответ №1:

Документация Spring Cloud содержит информацию, противоположную приведенному выше ответу: в ней говорится:

Предупреждение: При работе с ключами SSH ожидаемый закрытый ключ ssh должен начинаться с —— НАЧАТЬ ЗАКРЫТЫЙ КЛЮЧ RSA ——. Если ключ начинается с ——BEGIN OPENSSH PRIVATE KEY —— тогда ключ RSA не будет загружаться при запуске сервера spring-cloud-config. Ошибка выглядит следующим образом:

 - Error in object 'spring.cloud.config.server.git': codes [PrivateKeyIsValid.spring.cloud.config.server.git,PrivateKeyIsValid]; arguments [org.springframework.context.support.DefaultMessageSourceResolvable: codes [spring.cloud.config.server.git.,]; arguments []; default message []]; default message [Property 'spring.cloud.config.server.git.privateKey' is not a valid private key]
 

Документированный пример генерации ключа RSA, который должен работать::

 ssh-keygen -m PEM -t rsa -b 4096 -f ~/config_server_deploy_key.rsa
 

Ответ №2:

Как видно из этого руководства, формат закрытого ключа может быть старым PEM, а не OPENSSH.

Попробуйте восстановить ключ в старом формате, чтобы посмотреть, работает ли он:

 ssh-keygen -P "" -m PEM -t rsa -f secondKey
 

Скопируйте содержимое secondKey (предварительно протестировав его с ssh -Tv -i secondKey git@github.com помощью)