[나 혼자 스프링부트!] 4) Spring Cloud Config Server를 Private Repository와 연동

JoonYoung Maeng·2022년 3월 29일
1
post-thumbnail
post-custom-banner

Spring Cloud Config Server와 GitHub 레포지토리를 연동하는 과정에서 추가적으로 Private 레포지토리는 SSH 키 등록 및 등록 과정에서 이슈가 있어서 해결법을 정리하고자 한다.

Private 레포지토리를 연동하는 방법은 SSH 키 등록 및 GitHub 계정 자체를 연동하는 방법이 있다.

📌 GitHub 계정 자체를 연동하기

Spring Cloud Config Server의 application.yml 파일에 GitHub 계정 아이디 및 계정 패스워드를 작성한다.

server:
  port: 8088    # Spring Cloud Config Server 포트
spring:
  application:
    name: config-server
  cloud:
    config:
      server:
        git:
          uri: https://github.com/jymaeng95/spring-cloud-config-repository.git # GitHub 레포지토리 주소 (Yaml 파일을 관리하는 레포지토리)
					username: # Github 계정 아이디
					passwod: # Github 계정 패스워드           

# actuator 기본 설정
management:
  endpoints:
    web:
      exposure:
        include: "*"
  endpoint:
    shutdown:
      enabled: true

프로젝트를 빌드한 후 http://localhost:{SpringCloud Config Server 포트}/{application}/{profile}로 호출 하면 Github 레포지토리에서 application-profile.yml로 설정한 내용들을 불러온다.

📌 SSH 공개키 / 개인키를 이용해 연동하기

먼저, ssh-keygen 명령어를 이용해 ssh 공개키와 개인키를 생성한다.

$ ssh-keygen -M PEM -t rsa -b 4096 -C "Github 계정 이메일" -f 키파일명  # 공개키 / 개인키 생성
$ cat 키파일명.pub # 복사해서 SSh keys 부분에 업로드

SSH 키를 생성한 후 Github 계정 Settings > SSH and GPG keys > SSH keys에 공개키를 업로드한다.

SSH 키를 업로드 했다면, Spring Cloud Config Server의 application.yaml 파일을 수정해준다.

server:
  port: 8088    # Spring Cloud Config Server 포트
spring:
  application:
    name: config-server
  cloud:
    config:
      server:
        git:
           uri: git@github.com:jymaeng95/spring-cloud-config-repository.git   # private Repsoitory의 경우 ssh 키 발급해서 사용
           ignore-local-ssh-settings: true
           private-key: |
             -----BEGIN RSA PRIVATE KEY-----
             MHcCAQEEIIQf9VslUAT8vxL6sUBTaKuftWw7E6utoMcsdl4sl3/loAoGCCqGSM49
             ...
             -----END RSA PRIVATE KEY-----
           timeout: 4

# actuator 기본 설정
management:
  endpoints:
    web:
      exposure:
        include: "*"
  endpoint:
    shutdown:
      enabled: true

uri 부분을 Github 레포지토리에서 SSH 부분을 클릭해서 주소를 복사해서 넣어준다.

private-key 부분에는 ssh-keygen을 이용해 생성한 개인키 내용을 복사해서 붙여넣어준다.

개인키를 복사해서 넣을 때, private-key: 파이프라인 기호( | )를 적어주지 않고 복사하면 에러가 날 수도 있기 때문에 반드시 적어준다. 또한, -----BEGIN EC PRIVATE KEY----- 부터 -----END EC PRIVATE KEY-----까지 모두 복사해줘야 한다.

프로젝트를 빌드한 후 Config 엔드포인트를 호출해주면 해당 엔드포인트의 Configuration 내용을 가져오는 것을 확인할 수 있다.

🤔 번외 )Spring Cloud Config Server Github SHA-1 error 이슈

ssh-keygen을 통해 RSA 형식의 키를 발급받아서 Github 레포지토리를 연동했는데 Spring Cloud Config Server를 실행하면 ERROR: You're using an RSA key with SHA-1, which is no longer allowed. Please use a newer client or a different key type.에러가 발생했다.

Stackoverflow에서 RSA 방식이 아닌 ECDSA 형식의 암호화 키를 생성하면 된다는 해결책을 제시했다.

Stackoverflow : https://stackoverflow.com/questions/71489256/spring-cloud-config-server-github-sha-1-error

$ ssh-keygen -M PEM -t ecdsa -b 256 -C "Github 계정" -f 키파일명

키 파일을 생성하는 것만 다르고 Github 계정 Setting에 들어가서 공개키를 업로드하는 부분은 동일하다.

하지만, application.yaml 파일에서 설정을 추가적으로 해줘야한다.

private-key: |
             -----BEGIN EC PRIVATE KEY-----
             MHcCAQEEIIQf9VslUAT8vxL6sUBTaKuftWw7E6utoMcsdl4sl3/loAoGCCqGSM49
             ...
             -----END EC PRIVATE KEY-----
host-key: AAAAE2VjZHNhLXNoYTItbmlzdHAy.... # ssh-keyscan github.com의 hostmname
host-key-algorithm: ecdsa-sha2-nistp256    # 호스트 키 알고리즘

private-key 는 생성한 개인키를 복사해서 그대로 넣어준다.

그리고 , host-key 부분과 , host-key-algorithm 부분은 ssh-keyscan 명령어를 이용해 찾아서 넣어줄 수 있다.

$ ssh-keyscan -t ecdsa github.com
# github.com:22 SSH-2.0-babeld-4f04c79d
# host-key-algorith : ecdsa-sha2-nistp256 
# host-key AAAAE2VjZHNhLXNoYTItbmlzdHAyNTYAAAAIbmlzdHAy...

이렇게 레포지토리를 수정해준 후 동일하게 프로젝트를 빌드 후 엔드포인트를 호출하면 제대로 가져오는 것을 확인할 수 있다.

📄 References

Spring Cloud Config 에서 Github Private Repository 접근하기 : https://oingdaddy.tistory.com/188

profile
백엔드 개발자 지망생입니다!
post-custom-banner

1개의 댓글

comment-user-thumbnail
2022년 7월 14일

Spring Cloud Config Server Github SHA-1 error 이슈에서 올려주신 ssh 키 생성 명령어를 사용하면 Memory limit is invalid: PEM 이라는 오류가 발생하고 같이 공유해주신 Stack Overflow에서 "ssh-keygen -t ecdsa -b 256 -m PEM" 로 하니까 되더라구요.

답글 달기