Plaything의 오가니제이션에 있는 레포지토리에서 CI/CD를 구축하는 과정에서 SSH Key를 등록해야 한다는 문구가 나왔다.
그 동안 잘만쓰던 깃헙액션 CI/CD 스크립트와 환경변수인데 왜 안된다는건지 하루종일 이것만 붙잡아서 해결했다.
우선 내 로컬에서 scp로 EC2에 파일을 전송을 해보려고 했다.
처음에는 잘 안 됐는데 명령어의 문제여서 아래처럼 작성하니 파일이 잘 갔다.
$ scp -i 키 이름"C:\Users\정연호\Downloads\Source_Code\client\package.json" ubuntu@IP 주소:/home/ubuntu/
그러면, KEY 자체에 문제가 있는 것은 아닌 거 같았다.
jobs:
Deploy:
runs-on: ubuntu-latest
steps:
- name: Github 레포지토리에 올린 파일들을 불러오기
uses: actions/checkout@v4
- name: JDK 17버전 설치
uses: actions/setup-java@v4
with:
distribution: temurin
java-version: 17
# Debug 단계 추가
- name: Debug SSH connection
run: |
echo "Setting up SSH debug directory"
mkdir -p ~/.ssh
echo "${{ secrets.EC2_PRIVATE_KEY }}" > ~/.ssh/key.pem
chmod 600 ~/.ssh/key.pem
echo "Attempting SSH connection with verbose logging"
ssh -vvv -i ~/.ssh/key.pem -o StrictHostKeyChecking=no ubuntu@${{ secrets.EC2_HOST }}
continue-on-error: true
- name: Check key format
run: |
echo "Checking private key format"
ssh-keygen -l -f ~/.ssh/key.pem || echo "Invalid key format"
해결이 안 돼서 깃헙액션 스크립트에 디버깅 단계를 추가했다.
secrets.EC_HOST를 resolve할 수 없다는 로깅이 떴다.
EC_HOST 값을 읽어오지 못하는 상황같아서 좀더 자세하게 디버깅을 했다.
- name: Debug SSH connection
run: |
echo "Setting up SSH debug directory"
mkdir -p ~/.ssh
echo "Host value check:"
echo "Host value: ${{ secrets.EC2_HOST }}"
if [ -z "${{ secrets.EC2_HOST }}" ]; then
echo "EC2_HOST is empty!"
exit 1
fi
echo "Private key check:"
echo "${{ secrets.EC2_PRIVATE_KEY }}" > ~/.ssh/key.pem
chmod 600 ~/.ssh/key.pem
if [ ! -s ~/.ssh/key.pem ]; then
echo "Private key file is empty!"
exit 1
fi
echo "Key format validation:"
ssh-keygen -l -f ~/.ssh/key.pem || {
echo "Invalid private key format"
exit 1
}
echo "Testing SSH connection with verbose logging:"
ssh -vvv -i ~/.ssh/key.pem -o StrictHostKeyChecking=no ubuntu@${{ secrets.EC2_HOST }}
continue-on-error: true
EC2_HOST 자체가 비어있다고 한다.
혹시 내가 CI/CD 환경설정을 잘못한건가 싶어서 강의를 다시 봤는데...
여태까지 Variables에 값을 넣고
secrets.EC_HOST이렇게 값을 가져오려고 해서 문제가 발생한 거였다...
Variables는 비밀정보가 아닌 일반 정보를 넣어놓는 변수라고 한다.
어쩐지 저렇게 값이 다 표시가 돼서 이상하다고 생각했다.
원래는 내가 만든 시크릿 변수라고 해도 값이 표시되지 않았다.
그래서, 1차 당황을 했다.
그렇다면, 이 변수를 다른 사람들이 다 볼 수 있었다는 것이다...
다행히 AWS 결제 정보를 보니 문제는 없었던 것으로 보인다.
그래서, 부랴부랴 EC2와 RDS를 다 지워버렸다.
지금 RDS를 EC2를 통해서만 접근할 수 있게 했지만...
그래도 위험한 상황이었다.
이거 때문에 하루종일 CI/CD 스크립트를 변경했는데(허탈)
그래도 이참에 디버깅 방법을 새로 배워서 좋았다..