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 공개 키 등록
- GCP 콘솔에 로그인한다.
- Compute Engine → 메타데이터 → SSH 키 추가
- 생성된 공개 키(.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 키로 다시 시도하니 성공했다.
반응형
'Projects > 청하-청년을 위한 커뮤니티 서비스' 카테고리의 다른 글
[청하] 31. 찜한 정책 리스트 조회 기능 구현 (2) | 2024.10.21 |
---|---|
[청하] 30. 정책 찜하기 기능 구현 (0) | 2024.10.21 |
[청하] 28. GCP 설정 (feat. GCS 설정 및 스프링부트 연동) (0) | 2024.10.19 |
[청하] 27. 정책 상세 조회 기능 구현 (3) | 2024.10.18 |
[청하] 26. 정책 리스트 조회 기능 구현 (0) | 2024.10.18 |
댓글