문제 발생 배경
Springboot 웹 프로젝트를 Docker, Github Actions를 이용해 AWS EC2에 배포하려고 할 때 발생한 문제이다.
Github Actions 를 실행하기 위해 작성한 deploy.yml 파일 중 일부이다.
- name: AWS EC2에 ssh 접속 후 배포
uses: appleboy/ssh-action@master
with:
host: ${{ secrets.AWS_IP }}
port: 22
username: ubuntu
key: ${{ secrets.AWS_KEY }}
script: |
docker pull ${{ secrets.DOCKER_USER_NAME }}/${{ secrets.DOCKER_IMAGE_NAME }}-be
docker-compose up -d
Github Actions의 secrets에 AWS EC2의 퍼블릭 IP 주소, AWS private key를 보관하여 AWS EC2에 ssh 접속하여 배포한다.
발생한 오류
Github Actions가 AWS EC2에 ssh 접속하는 과정에서 AWS_KEY를 인식하지 못해 발생한 문제이다.
해결 방법
이 오류의 주요 원인으로는
1. Github Secrets에 저장된 SSH private key가 올바르지 않음
2. AWS EC2의 ~/.ssh/authorized_keys 파일에 퍼블릭 키가 등록되지 않음
3. EC2 인스턴스에서 ubuntu 사용자의 SSH 접근 권한이 부족함
4. EC2의 SSH 설정 파일 (/etc/ssh/sshd_config)에서 PubkeyAuthentication이 비활성화됨
등이 될 수 있다.
나의 경우에는 1 -> 2 를 통해 해결할 수 있었다.
1. Github Secrets에 올바른 private key 등록하기
로컬에서 SSH 프라이빗 키를 확인한다.
cat ~/.ssh/id_rsa
-----BEGIN OPENSSH PRIVATE KEY-----
...
-----END OPENSSH PRIVATE KEY-----
cat 명령으로 출력되는 ----BEGIN 부터 ---END ~ KEY ----- 까지 모두 복사해서 저장해야 한다.
내가 오류가 계속 발생했던 이유는 로컬의 ssh 프라이빗 키를 등록한 것이 아니라 EC2에서 위의 명령을 실행하여 저장했기 때문이었다.
로컬에서 사용하는 private key는 EC2 키페어가 아니라 직접 생성한 ssh 키이다.
2. EC2의 authorized_keys에 퍼블릭 키가 올바르게 등록되었는지 확인
Github Actions에서 사용하는 SSH 키의 public key가 EC2의 ~/.ssh/authorized_keys 에 저장되어 있어야 한다.
EC2에서 SSH 접속 후 퍼블릭 키를 확인해보자.
cat ~/.ssh/authorized_keys
등록되지 않았다면 퍼블릭 키를 다음 명령어로 추가해준다.
echo "ssh-rsa AAAAB3Nza... (your public key)" >> ~/.ssh/authorized_keys
chmod 600 ~/.ssh/authorized_keys
결론
Github에 등록하는 로컬의 private key와 EC2의 authorized_keys, 즉 public key의 차이를 알고 있어야 한다.
나는 두 키를 같다고 생각하여 발생한 문제였다.
참고한 글들
https://github.com/appleboy/ssh-action/issues/297
https://github.com/appleboy/ssh-action#setting-up-ssh-key
'트러블슈팅' 카테고리의 다른 글
[CI/CD] React.js + Spring Boot 웹 서비스 Docker, Github Action으로 EC2에 자동 배포하기 - 2. Docker (0) | 2025.03.31 |
---|