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 파일은 읽을 수 있는 아스키코드로 이루어져 있다. vscode같은 편집기로 자신이 원하는 .pem파일을 열면 다음과 같은 형식으로 이루어져 있다.
----BEGIN RSA PRIVATE KEY-----
...
...
----END RSA PRIVATE KEY-----
이렇게 나와있는 pem 파일을 내용을 모두 복사해서 github action에 token으로 붙여넣기 한다.
- 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줄의 의미는 각각 다음과 같다.
이렇게 하면 .pem 파일을 사용하여 유저 비밀번호를 사용할 필요 없이 github action을 진행할 수 있는 것이다.
혹시 script.sh 도 공유 가능한가요!