.pem 파일을 github action에서 사용하기

mirageoasis·2023년 3월 11일
2

좌충우돌 스프링

목록 보기
1/4

문제상황

github action으로 서버에서 특정 스크립트를 실행하는 명령을 작성하고 있었다. ec2를 처음 생성할 때 확장자가 pem인 파일이 생성성된다. 그리고 ec2 인스턴스를 터미널에서 접속할 때는 ssh에서 -i 옵션과 .pem 파일을 사용해 다음과 같이 접속한다.

ssh -i "pem 파일의 이름" "유저 이름"@"서버 주소"

github actions에서 처음에 설정을 할 때는 pem파일을 사용해 접속할 수 있는 방법을 알지 못해서 비밀번호를 사용하여 다음과 같이 github actions를 사용하였다.

      - name: Build and deploy
        run: |
          sudo apt-get install sshpass
          sshpass -p $SSH_PRIVATE_KEY ssh -o StrictHostKeyChecking=no $SSH_USER@$SSH_KNOWN_HOSTS '~/script.sh'
        env:
          SSH_PRIVATE_KEY: ${{secrets.SSH_PRIVATE_KEY}}
          SSH_USER: ${{secrets.SSH_USER}}
          SSH_KNOWN_HOSTS: ${{secrets.SSH_KNOWN_HOSTS}}

하지만 문제점은 sshpass 명령어를 사용하면 비밀번호를 사용하기 때문에 .pem 파일에 비해서 보안적으로 취약하다는 점이다.


구글링을 통해서 다음 링크에서 해답을 얻어서 다음과 같은 방법으로 github action의 설정을 진행하였다.

.pem 파일 등록하기

.pem 파일은 읽을 수 있는 아스키코드로 이루어져 있다. vscode같은 편집기로 자신이 원하는 .pem파일을 열면 다음과 같은 형식으로 이루어져 있다.

----BEGIN RSA PRIVATE KEY-----
...
...
----END RSA PRIVATE KEY-----

이렇게 나와있는 pem 파일을 내용을 모두 복사해서 github action에 token으로 붙여넣기 한다.

github action 수정

      - name: Build and deploy
        run: |
          echo "$SSH_PEM_KEY" >> $HOME/key.pem
          chmod 400 $HOME/key.pem
          ssh -i $HOME/key.pem -o StrictHostKeyChecking=no ${SSH_USER}@${SSH_KNOWN_HOSTS} '~/script.sh'
        env:
          SSH_USER: ${{secrets.SSH_USER}}
          SSH_KNOWN_HOSTS: ${{secrets.SSH_KNOWN_HOSTS}}
          SSH_PEM_KEY: ${{secrets.SSH_PEM_KEY}}

실질적으로 github action을 실행하는 코드 3줄의 의미는 각각 다음과 같다.

  1. SSH_PEM_KEY 라는 변수의 값을 받아서(이전에 .pem 값을 붙여넣기한 변수이다.) home 디렉토리에 있는 key.pem 값으로 만든다.
  2. 1번에서 생성한 key.pem의 값의 권한을 400으로 바꾼다. (바꾸지 않으면 오류가 난다.)
  3. ssh에 1번에서 생성한 파일을 이용해서 StrictHostKeyChecking을 하지 않는 상태로 SSH_KNWON_HOST 변수에 값으로 저장되어있는 서버에 SSH_USER 라는 변수에 있는 값으로 저장되어있는 유저 이름으로 접속해서 script.sh 라는 파일을 실행하는 것을 의미한다.

이렇게 하면 .pem 파일을 사용하여 유저 비밀번호를 사용할 필요 없이 github action을 진행할 수 있는 것이다.

2개의 댓글

comment-user-thumbnail
2023년 11월 22일

혹시 script.sh 도 공유 가능한가요!

1개의 답글