github actions CD ssh 연결안됨

권태형·2023년 8월 9일
2

bnb Back-Server Project

목록 보기
28/31
post-thumbnail

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

연결이 정상적으로 이루어진 것을 확인할 수 있었다.

profile
22년 12월 개발을 시작한 신입 개발자 ‘권태형’입니다. 포스팅 하나하나 내가 다시보기 위해 쓰는 것이지만, 다른 분들에게도 도움이 되었으면 좋겠습니다. 💯컬러폰트가 잘 안보이실 경우 🌙다크모드를 이용해주세요.😀 지적과 참견은 언제나 환영합니다. 많은 댓글 부탁드립니다.

1개의 댓글

comment-user-thumbnail
2023년 8월 9일

즐겁게 읽었습니다. 유용한 정보 감사합니다.

답글 달기