[트러블 슈팅] Jenkins Publish over SSH: BapPublisherException 오류 해결하기

2025. 1. 5. 16:49·트러블 슈팅

1. 시작하며

Jenkins를 활용한 CI/CD 파이프라인 설정 중 Publish over SSH 플러그인을 사용하여 서버 간 파일 전송 및 배포를 설정하려 했지만, 예상치 못한 인증 오류로 인해 막히는 경우가 종종 있습니다. 이번 포스트에서는 BapPublisherException 오류의 원인과 해결 방법을 공유합니다.

2. 문제점 발생

Main Server(192.168.0.25)에 설치된 Jenkins를 통해 Sub Server(192.168.0.47)로 배포를 진행하려고 했습니다. 이를 위해 Jenkins의 Publish over SSH 플러그인을 사용하여 SSH 통신을 설정했지만, 다음과 같은 오류가 발생했습니다.

jenkins.plugins.publish_over.BapPublisherException: Failed to connect and initialize SSH connection. Message: [Failed to connect session for config [Sub Server SSH]. Message [Auth fail for methods 'publickey']]

문제점을 요약하면 다음과 같습니다.

  • 공개키 및 개인키는 모두 정상적으로 생성하고 설정 완료
  • Jenkins와 Sub Server 간 SSH 통신이 인증 단계에서 실패
  • OpenSSH와 Jenkins 플러그인 간의 호환성 문제 의심

2.1 원인 분석

1) OpenSSH 8.8의 보안 정책 변경

  • OpenSSH 8.8 이상에서는 SHA-1 해시 알고리즘을 사용하는 RSA 키를 기본적으로 지원하지 않습니다.
  • ssh-rsa 방식은 PubkeyAcceptedAlgorithms에서 제외되었으며, 대신 ECDSA 또는 ED25519 알고리즘 사용을 권장합니다.

2) Publish over SSH 플러그인의 한계

  • Jenkins의 Publish over SSH 플러그인은 내부적으로 JSch 라이브러리를 사용합니다.
  • JSch는 최신 암호화 알고리즘을 지원하지 않으며, 특히 rsa-sha2-256 및 rsa-sha2-512와 같은 최신 RSA 서명을 처리할 수 없습니다.
  • 결과적으로 RSA 키를 사용하면 인증이 실패하고, BapPublisherException 오류가 발생합니다.

3. 문제점 해결

1) ECDSA 키 사용

문제를 해결하려면 RSA 키 대신 ECDSA 키를 사용해야 합니다. 아래 명령어를 통해 ECDSA 키를 생성합니다.

ssh-keygen -t ecdsa -b 521 -m PEM
  • t ecdsa: ECDSA 키 생성
  • b 521: 521비트 키 생성 (최대 보안)
  • m PEM: PEM 형식으로 키 저장

2) 생성된 키 설정

  1. Sub Server에 공개키 등록
    생성된 공개키를 Sub Server의 ~/.ssh/authorized_keys 파일에 추가합니다.
sudo nano ~/.ssh/authorized_keys
  1. Jenkins에 개인키 설정
    Jenkins의 Manage Jenkins > Configure System > Publish over SSH 메뉴에서 Jenkins SSH Key로 이동하여 다음과 같이 설정합니다.

  • Key: 생성된 개인키(~/.ssh/id_ecdsa)를 복사하여 입력
  • Passphrase: 개인키 생성 시 입력한 암호 (비워둔 경우 공란 유지)

3) SSH 설정 및 통신 테스트

Jenkins에서 설정한 SSH 연결 정보와 키를 활용하여 통신 테스트를 진행합니다. 다음 과정을 따라 설정 및 테스트를 완료할 수 있습니다.

  1. SSH Server 정보 입력
    • Name: 연결하려는 서버 이름(예: Sub Server SSH)
    • Hostname: Sub Server의 IP 주소(예: 192.168.0.47)
      • Main Server와 Sub Server가 같은 네트워크를 사용하기 때문에 여기서는 사설 IP를 입력하였습니다.
    • Username: Sub Server에 접속할 사용자 이름 (계정)
    • Remote Directory: 파일이 전송될 서버의 디렉토리 경로(필요에 따라 설정, 빈칸으로 두어도 무방)
      • 빈칸으로 둔 경우 해당 계정으로 접속한 디렉토리로 전송합니다. (예: /home/계정명)
      추가적으로 Avoid sending files that have not changed 옵션을 활성화하여 불필요한 파일 전송을 방지할 수 있습니다.
  2. Jenkins의 Manage Jenkins > Configure System > Publish over SSH 메뉴에서 다음 정보를 입력합니다.
  3. 키와 연결 정보 확인
  4. SSH Server 정보를 입력한 후, Test Configuration 버튼을 눌러 연결 상태를 확인합니다. 설정이 정상적이라면 Success 메시지가 나타납니다.

4. 결론

이번 사례를 통해 Jenkins의 Publish over SSH 플러그인을 사용할 때, OpenSSH와 JSch의 호환성 문제로 인해 ECDSA 또는 ED25519 키를 사용하는 것이 필수적임을 확인했습니다. 요약하면 다음과 같습니다.

  1. OpenSSH 8.8 이상에서는 SHA-1 기반 RSA 키가 차단됩니다.
  2. ECDSA 521비트 키는 보안성과 호환성을 모두 충족합니다.
  3. Jenkins Publish over SSH 플러그인은 JSch 라이브러리의 한계로 최신 암호화 알고리즘을 완벽히 지원하지 않습니다.

5. 참고자료

  • OpenSSH 8.8 릴리즈 노트
  • Jenkins Publish over SSH 플러그인 깃헙 이슈
  • Jenkins Publish over SSH 인증시 BapPublisherException 오류 원인과 해결책

'트러블 슈팅' 카테고리의 다른 글

[트러블 슈팅] RESTful API 설계: GET 메서드에서 Request Body를 사용해도 될까?  (0) 2025.01.13
[트러블 슈팅] SSH 접속 오류: 포트 설정과 포트포워딩의 중요  (1) 2025.01.05
'트러블 슈팅' 카테고리의 다른 글
  • [트러블 슈팅] RESTful API 설계: GET 메서드에서 Request Body를 사용해도 될까?
  • [트러블 슈팅] SSH 접속 오류: 포트 설정과 포트포워딩의 중요
개발자 동긔
개발자 동긔
배우고 느낀점들을 기록합니다. 열정 넘치는 백엔드 개발자로 남고싶습니다.
  • 개발자 동긔
    Donker Dev
    개발자 동긔
  • 전체
    오늘
    어제
    • Category (39)
      • BackEnd (23)
        • JAVA (15)
        • Spring & JPA (7)
      • Database (4)
      • Computer Science (2)
        • Network (0)
        • Security (0)
        • Web (1)
      • DevOps (6)
        • Docker (1)
        • Jenkins (0)
        • Monitoring (2)
        • CICD (1)
      • 트러블 슈팅 (3)
      • 성능 개선 (1)
      • Project (0)
  • 인기 글

  • 태그

    Spring
    interface
    @RequestBody
    restful api
    Database
    spring cloud msa
    mysql master/slave replication
    spring boot
    와일드카드
    JPA
    인터페이스
    master/slave db 이중화 처리
    java
    nginx
    Jenkins
    docker
    restful api 설계
    docker compose
    SSH
    CICD
  • 최근 댓글

  • 최근 글

  • hELLO· Designed By정상우.v4.10.3
개발자 동긔
[트러블 슈팅] Jenkins Publish over SSH: BapPublisherException 오류 해결하기
상단으로

티스토리툴바