github actions CD부분으로 작성한 job이 정상동작하지 않았다.
name: CI/CD
on:
push:
branches: ['master', 'dev']
pull_request:
branches: ['master', 'dev']
jobs:
CI:
runs-on: ubuntu-20.04
steps:
- uses: actions/checkout@v3
- name: set-up node.js 18.x
uses: actions/setup-node@v3
with:
node-version: 18.x
cache: 'npm'
- name: clean install node package
run: npm ci
- name: build
run: npm run build
- name: run test
run: npm test
CD:
needs: CI
runs-on: ubuntu-20.04
steps:
- uses: actions/checkout@v3
- name: Run scripts in server
uses: appleboy/ssh-action@master
with:
key: ${{ secrets.KEY }}
host: ${{ secrets.HOST }}
username: ${{ secrets.USER_NAME }}
port: ${{ secrets.PORT }}
script: |
cd thbnb
cd TaeHyeongBnb
git pull
npm run build
pm2 restart 0
결과적으로 ssh: handshake failed: EOF
이부분!
ssh: handshake failed: EOF
오류는 SSH 연결 중에 연결이 중단되어 발생하는 오류이다. 해당 오류 메시지는 SSH 핸드셰이크 중에 예상하지 못한 종료가 발생하여 연결이 실패했음을 나타낸다고 한다.
그렇다면 왜 연결에 실패했는가? 스크립트를 제외한 연결만을 확인하기 위해 스크립트를 내용을 지우고 whoami만 동작하게 바꿨다.
CD:
needs: CI
runs-on: ubuntu-20.04
steps:
- uses: actions/checkout@v3
- name: Run scripts in server
uses: appleboy/ssh-action@master
with:
password: ${{ secrets.KEY }}
host: ${{ secrets.HOST }}
username: ${{ secrets.USER_NAME }}
port: ${{ secrets.PORT }}
script: |
whoami
이후 github secrets 설정이 내가 잘못한건가? 싶어서 각 secrets에 포함되는 PORT, USER_NAME, KEY, HOST를 다시작성해 주었지만, 똑같이 에러를 뱉었다.
혹시 몰라서 PORT를 내가 설정한 포트가 아닌, SSH의 기본포트인 22번 포트로 변경해 주니까 에러의 내용이 변경되었다.
ssh: handshake failed: ssh: unable to authenticate, attempted methods [none], no supported methods remain
이번엔 인증문제 오류가 발생했다. 인증문제면 ID와 PASSWORD의 문제인가?
나는 ec2 ssh로 접속할때 공용키가 아니라 pem키를 사용했다. 따라서 secrets의 Key에 pem키 내용을 text파일로 열어서 붙여넣기를 했었는데, 이 pem키를 사용해서 접속하는 로직이 따로 있는지 확인해 보았다.
appleboy ssh 커멘드 안내페이지에 아래와 같이 private key를 이용한 접속 로직이 password와는 다른것을 볼 수 있었다.
password를 제외하고 key로 변경해서 다시 동작시켜 보았다.
CD:
needs: CI
runs-on: ubuntu-20.04
steps:
- uses: actions/checkout@v3
- name: Run scripts in server
uses: appleboy/ssh-action@master
with:
key: ${{ secrets.KEY }}
host: ${{ secrets.HOST }}
username: ${{ secrets.USER_NAME }}
port: ${{ secrets.PORT }}
script: |
whoami
연결이 정상적으로 이루어진 것을 확인할 수 있었다.
즐겁게 읽었습니다. 유용한 정보 감사합니다.