Spring Cloud Config Server와 GitHub 레포지토리를 연동하는 과정에서 추가적으로 Private 레포지토리는 SSH 키 등록 및 등록 과정에서 이슈가 있어서 해결법을 정리하고자 한다.
Private 레포지토리를 연동하는 방법은 SSH 키 등록 및 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-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 내용을 가져오는 것을 확인할 수 있다.
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...
이렇게 레포지토리를 수정해준 후 동일하게 프로젝트를 빌드 후 엔드포인트를 호출하면 제대로 가져오는 것을 확인할 수 있다.
Spring Cloud Config 에서 Github Private Repository 접근하기 : https://oingdaddy.tistory.com/188
Spring Cloud Config Server Github SHA-1 error 이슈에서 올려주신 ssh 키 생성 명령어를 사용하면 Memory limit is invalid: PEM 이라는 오류가 발생하고 같이 공유해주신 Stack Overflow에서 "ssh-keygen -t ecdsa -b 256 -m PEM" 로 하니까 되더라구요.