EC2 접속 방법

EC2에 접속하기 위해서 EC2생성시 발급받은 private key 가 저장된 key pairpublic key 가 저장된 ~/.ssh/authorized_keys 와 매칭을 통해 ssh 접속을 진행하게 된다. 만약 ~/.ssh/authorized_keys 파일을 삭제하거나 잘못된 값이 입력되면 접속이 불가능 하다.

문제 발생

PEM 파일로 접속 시도시 permission denied 또는 refused 발생

원인

~/.ssh/authorized_keys 키를 지웠거나, 파일이 변조됬거나, private key 를 가진 PEM 파일이 잘못되어 EC2에 접속이 불가한 상태.

아무 생각없는 해결법

새로운 EC2 생성하여 원래 EC2환경과 똑같이 세팅하여 재배포

간단 해결법

요약 : EBS 기반 EC2는 Volume을 Attach/Detach 할 수 있으며, mount 를 통해 쉽게 해결 할 수 있다.

  1. 임시 EC2 하나 생성

    • EC2 생성시 subnet(Availability zone)은 원래 EC2와 동일하게 구성
      subnet(Availability zone) 동일하게
      < subnet(Availability zone) 동일하게 >
  2. 임시, 원본 EC2둘다 STOP한다.

  3. 원본 EC2 EBS Volumen Detach

    • Volume 메뉴에서 원본 EC2 의 Volume을 떼어낸다.
      Volume Detach
      < Volume Detach >
  4. 임시 EC2에 원본 EC2 Volume Attach

    • 임시 생성한 EC2에 원본 EC2 Volume 을 붙인다.( 두개의 Block Storage 를 맵핑 시키는게 목적 )
    • 원래 보통 Block Deivce 값은 /dev/sda1 /dev/sdf .. 등등인데, Attach 할 EC2는 Root Device 값이 아닌 다른 값으로 디렉토리를 지정해야한다. (/dev/sdf 와 같이)
      EC2 Volume Attach
      < EC2 Volume Attach >
  5. 2개 Block을 가진 임시 EC2에 ssh 접속 한다.

  6. 다음 커맨드 실행

    // root 로 접속
    $ sudo su
    // 마운트할 임시 지점 생성
    $ mkdir /mnt/tmp_mount
    // 임시 지점에 attch했던 블록 마운트
    $ mount /dev/xvdf1 /mnt/tmp_mount
    // ssh key 복사 붙여넣기
    $ cat /home/ubuntu/.ssh/authorized_keys > /mnt/tmp_mount/home/ubuntu/.ssh/authorized_keys
    // 마운트 해제
    $ umount /mnt/tmp_mount
    

    마운트 할 대상을 선택할 때 (/dev/xvdf1) 원래 sdf 볼륨으로 지정됬는데 이상하게 마운트하려면 xvdf 또는 xvdf1 으로 지정해야 마운트를 찾을 수 있다. 아마 상황마다 다른것 같다.

  7. Attach 했던 Volume을 Detach 후 원래 EC2에 다시 Attach 한다.

결론

같은 key pair로 생성된 ec2는 동일한 pubilc key 를 가지고 있고, EC2 EBS Volume을 이용해서 멀티 블록을 구성하고 마운트를 이용해서 public key를 복사 하는 방법으로 위 문제를 해결 하였다. 이런 문제 해결을 하기전에 authorized_keys 파일은 잘 보관해놓고 수정이나 삭제는 하지말아야 한다.
더 편리하고 안 귀찮은 방법이 있는지 더 찾아봐야 하겠지만 이것이 일단 최선인거 같다.!

참고