[AWS] EC2 접속용 SSH 키페어 분실 또는 손상 시 키 재생성 방법

현재 운영 중인 EC2 인스턴스를 SSH로 접속하는 용도로 SSH Key-pair를 사용합니다. 서버에 public-key를 저장해놓고 private-key는 로컬에 보관하여 사용합니다. 일반적으로 PEM 키를 사용합니다.

사용 중인 맥북을 공장초기화하면서 로컬에 있던 개인키(private-key)가 안전하게 i-Cloud에 저장되어있을 것이라 생각했습니다. 생각대로 공장초기화 후 i-Cloud를 통해 개인키를 다운받았고 EC2 인스턴스를 SSH로 접속해봤습니다. 그런데 접속이 되질 않습니다.

Permission denied (publickey).

개인키 퍼미션도 600으로 낮춰놨고 아무런 문제가 없었지만 계속 저 메세지만 출력되었습니다. 끝내 i-Cloud로 복원된 개인키가 손상되었다는 결론을 내게 되었고 키페어를 새로 생성하기로 했습니다.

키 페어 새로 생성하여 적용하는 방법

1. 우선 SSH를 접속할 로컬 환경에서 키를 새로 생성한다. 아래 명령을 입력한뒤 엔터 연타

$ ssh-keyhen -m PEM

2. 생성된 개인키의 공개키(public-key)를 출력하여 복사한다.

$ ssh-keygen -y -f {개인키 파일 경로}

3. AWS EC2 콘솔 -> 해당 인스턴스 중지 -> 인스턴스 우클릭 -> Instance Settings -> Edit user data -> 아래 스크립트 입력

Content-Type: multipart/mixed; boundary="//"
MIME-Version: 1.0

--//
Content-Type: text/cloud-config; charset="us-ascii"
MIME-Version: 1.0
Content-Transfer-Encoding: 7bit
Content-Disposition: attachment; filename="cloud-config.txt"

#cloud-config
cloud_final_modules:
- [users-groups, once]
users:
  - name: ec2-user
    ssh-authorized-keys: 
    - {위에서 복사한 공개키}

4. 저장 후 인스턴스 시작

5. SSH 접속 테스트

$ ssh -i {개인키 경로} ec2-user@{접속 호스트}

6. 잘 되면 성공. 이제 3번에서 저장했던 스크립트를 삭제해야한다. 저 스크립트는 EC2 서버에서 .ssh/authorized_keys 파일에 공개키를 넣어주는 역할이다. 즉, 한번 실행되고 나면 역할을 다하는데다 콘솔에 공개키를 포함한 스크립트가 존재하는 것은 보안상 리스크가 있기 때문에 삭제 해주는 것이 좋다. 인스턴스를 다시 중지한 후 3번 Edit user data 화면에서 저장한 스크립트를 삭제 -> 저장 후 인스턴스를 다시 시작한다.

7. 최종 접속 확인. 5번 접속 테스트를 다시 한번 해보고 접속이 잘된다면 키페이 교체는 완료된 것이다.