2025. 12. 5. 15:11ㆍ문제해결
개요
이 글에서는 Github Action의 워크플로우 파일을 로컬 개발 환경에서 act라는 오픈소스 프로세스를 실행하여 테스트하다가 SSH 접속이 안되는 문제를 해결하는 것을 다루고 있습니다.
GitHub - nektos/act: Run your GitHub Actions locally 🚀
Run your GitHub Actions locally 🚀. Contribute to nektos/act development by creating an account on GitHub.
github.com
배경
GCP 클라우드 기반의 배포를 위한 워크플로우 파일을 작성하는 과정에서 Github Action 워크플로우를 로컬 개발 환경에서 테스트를 하기 위해서 act라는 프로세스를 이용하여 테스트를 하고 있었습니다. 그중에서 문제가 되었던 것은 클라우드의 VM 인스턴스에 접속하기 위해서 SSH 접속을 시도하는 과정에서 문제가 발생하였습니다.
문제가 발생했던 워크플로우의 스텝은 다음과 같습니다.
jobs:
deploy:
runs-on: ubuntu-22.04
environment: gcp-production
needs: build-image
defaults:
run:
shell: bash
steps:
# ...
# gcp ssh 연결 확인
- name: Test SSH Connection
uses: appleboy/ssh-action@v1.0.3
with:
host: ${{ env.GCP_INSTANCE_IP }}
username: ${{ env.GCP_SSH_USERNAME }}
passphrase: ${{ env.GCP_SSH_PASSPHRASE }}
key: ${{ env.GCP_SSH_PRIVATE_KEY }}
port: 22
script: |
echo "SSH connection successful!"
act 명령어 실행
act -W .github/workflows/ci.cd.production.gcp.yml \
--container-architecture linux/amd64 \
--secret-file .secrets \
--job deploy
.secrets 파일
GIT_TOKEN={GIT_TOKEN_VALUE}
DOCKER_USERNAME={USERNAME}
DOCKER_PASSWORD={PASSWORD}
GCP_INSTANCE_IP={VM_INSTANCE_IP}
GCP_SSH_USERNAME={SSH_USERNAME}
GCP_SSH_PASSPHRASE={SSH_PASSPHRASE}
GCP_SSH_PRIVATE_KEY=-----BEGIN OPENSSH PRIVATE KEY-----\n{데이터 본문}\n-----END OPENSSH PRIVATE KEY-----
실행 결과

원인
위와 같이 SSH 접속을 실패한 원인은 SSH Private Key 값이 정확하지 않았기 때문입니다. 현재 설정된 GCP_SSH_PRIVATE_KEY 변수의 값의 형식은 다음과 같습니다.
GCP_SSH_PRIVATE_KEY=-----BEGIN OPENSSH PRIVATE KEY-----\n{데이터 본문}\n-----END OPENSSH PRIVATE KEY-----
실제 pem 파일에 저장된 SSH Private Key 값은 다음과 같습니다.

위와 같은 값이 나오게된 경위는 Private Key값이 줄바꿈이 포함되어 저장되어 있습니다. 이러한 값을 한줄의 문자열로 저장하기 위해서 줄바꿈을 "\n" 문자열로 변경하여 넣어야 겠다고 생각하였습니다. 그래서 다음과 같은 명령어를 사용하여 줄바꿈을 "\n"으로 변경하여 출력하도록 하였습니다.
KEY_FILE_PATH="{pem 파일 경로}"
awk '{printf "%s\\n", $0}' "$KEY_FILE_PATH" | sed 's/\\n$//'
하지만 위와 같이 생성된 한줄의 문자열 형태는 정확하지 않은 값이기 때문에 SSH 접속에 실패한 것입니다.
해결 방법
정확한 SSH Private Key 값을 프로퍼티 값에 넣기 위해서는 다음과 같은 형태로 저장되어야 합니다.
GCP_SSH_PRIVATE_KEY="-----BEGIN OPENSSH PRIVATE KEY-----
...mNyeXB0AAAAGAAAABDsFvUfRU
...
...sE6n0A==
-----END OPENSSH PRIVATE KEY-----"
다음 act 명령어를 실행하여 SSH 접속이 되는지 확인해봅니다.
act -W .github/workflows/ci.cd.production.gcp.yml \
--container-architecture linux/amd64 \
--secret-file .secrets \
--job deploy
실행 결과를 보면 SSH 접속하여 echo 명령어로 출력한 것을 볼 수 있습니다.

References
'문제해결' 카테고리의 다른 글
| VisualVM Profiler 사용할 때 특정 Profile Class가 표시되지 않는 문제 해결 (0) | 2025.12.15 |
|---|---|
| Gradle 빌드 수행시 JDK 버전과 Lombok 라이브러리 버전 충돌로 인한 빌드 실패 문제 해결 (0) | 2025.11.29 |
| Spring JPA 대용량 데이터 조회 최적화, 300만건 포트폴리오 손익 데이터 처리 개선 사례 (0) | 2025.04.29 |
| 이벤트 리스너 메서드에서 삭제된 매입 이력이 조회되는 문제 해결 (0) | 2024.08.18 |
| ngrinder agent의 local server 연결 문제 해결 (0) | 2024.06.28 |