본문 바로가기
Projects/청하-청년을 위한 커뮤니티 서비스

[청하] 29. GCP 환경 구축 - SSH 키 설정 및 CI/CD 파이프라인 구성

by Lpromotion 2024. 10. 19.

GCP에서 서버를 운영하고 CI/CD 파이프라인을 구축할 때 SSH 키 설정이 필요하다.

GCP 서버에 접속하기 위한 SSH 키를 생성 및 설정하고, CI/CD 파이프라인에서 발생한 SSH 관련 문제를 해결했다.

 

1. SSH 키 생성

REF) Google Cloud 공식 문서

 

Windows 10 이상 환경에서 SSH 키를 생성하는 방법이다.

명령어 프롬프트를 열고 -C 플래그와 함께 ssh-keygen 명령어를 사용하여 새 SSH 키 쌍을 만든다.

ssh-keygen -t rsa -f C:\Users\{WINDOWS_USER}\.ssh\{KEY_FILENAME} -C {USERNAME} -b 2048
  • WINDOWS_USER: Windows 머신의 사용자 이름이다.
  • KEY_FILENAME: SSH 키 파일의 이름이다. 예를 들어 파일 이름이 my-ssh-key이면 이름이 my-ssh-key인 비공개 키 파일을 생성하고 이름이 my-ssh-key.pub인 공개 키 파일을 생성한다.
  • USERNAME: VM의 사용자 이름이다.

위 명령을 실행하면 passphrase 설정 요청이 나오는데 CI/CD 파이프라인에서 사용한다면 설정하지 않아야 한다.

나는 처음에 설정했더니 CI/CD 파이프라인 실행 중에 오류가 발생하여 다시 생성했다.

 

2. GCP에 SSH 공개 키 등록

  1. GCP 콘솔에 로그인한다.
  2. Compute Engine → 메타데이터 → SSH 키 추가
  3. 생성된 공개 키(.pub 파일)의 내용을 복사하여 붙여넣는다.

 

3. VSCode에서 SSH 설정

내가 사용하고 있는 VSCode 에서 서버 접속을 위해 SSH 설정 파일을 구성한다.

C:\Users\{사용자이름}\.ssh\config

Host {서버별칭}
  HostName {서버 IP 주소}
  User {사용자명}
  IdentityFile C:\Users\{사용자이름}\.ssh\{개인키파일명}

 

VSCode 에서 서버에 접속했다.

 

4. CI/CD 파이프라인 구성 및 문제 해결

4.1. GitHub Actions 이용한 CI/CD 파이프라인의 GCP 관련 구성

.github/workflows/cicd.yml

- name: Deploy to prod
  uses: appleboy/ssh-action@master
  id: deploy-prod
  if: contains(github.ref, 'dev')
  with:
    host: ${{secrets.HOST}}
    username: root
    password: ${{secrets.SSH_PASSWORD}}
    port: 22
    key: ${{ secrets.PRIVATE_KEY }}
    envs: GITHUB_SHA
    script: |
      sudo docker ps
      sudo docker stop springboot
      sudo docker rm -f springboot
      sudo docker pull ${{secrets.DOCKER_REPOSITORY}}
      sudo docker run -d -p 8080:8080 --net=host --name springboot ${{secrets.DOCKER_REPOSITORY}}
      sudo docker image prune -f

위 코드는 cicd.yml 파일의 일부로, GCP 서버에 배포하는 부분이다.

  • SSH를 통한 서버 접근
    • host: GCP 인스턴스의 IP 주소
    • username: 서버 접속 사용자명
    • key: GCP 인스턴스 접속용 SSH 개인 키
  • 배포 스크립트
    • Docker를 사용하여 애플리케이션을 배포한다.
    • -net=host 옵션은 GCP 인스턴스의 네트워크 스택을 직접 사용하게 한다.
  • 보안
    • ${{ secrets.~}} 형식으로 중요한 정보를 GitHub Secrets로 관리한다.
    • GitHub Repository의 Settings → Secrets and variables → Actions에서 필요한 secrets를 설정하면 된다.

위 설정으로 GItHub Actions는 코드가 dev 브랜치에 푸시될 때마다 자동으로 GCP 인스턴스에 애플리케이션을 배포한다.

 

4.2. SSH 관련 오류 해결

에러 로그

...
======CMD======
2024/07/11 15:50:14 ssh.ParsePrivateKey: ssh: this private key is passphrase protected
sudo docker ps
...
sudo docker image prune -f
======END======
2024/07/11 15:50:15 ssh: handshake failed: ssh: unable to authenticate, attempted methods [none], no supported methods remain
Error: Process completed with exit code 1.

CI/CD 파이프라인 실행 중에 오류가 발생했다.

이 오류는 SSH 키가 passphrase(암호)로 보호되어 있을 때 발생한다. CI/CD 환경에서는 자동화를 위해 암호 없는 키를 사용해야 한다.

암호없는 키로 다시 생성했다.

 

수정된 SSH 키로 다시 시도하니 성공했다.

반응형

댓글