EC2 key로 ssh접속 Permission Denied (public key) 해결하기

pds·2022년 11월 9일
9
post-thumbnail
post-custom-banner

같이 공부하는 스터디 동료분이 다음과 같은 문제를 겪었다고 하여 같이 해결해보았다.


추론1 - 키 권한문제?

  • 예전에 키 파일에 읽기 권한이 없어서 접속 못한 기억이 있었는데 권한 설정해주니까 잘 된 기억이 있었다.
$ chmod 777 /user/key/directory/yourkey.pem

사실 777 로 때려박으면 안되지만 일단 그냥 넘어갑니다.

이렇게 해서 접속이 된다면 매우 해피하다!


추론2 - 서버 보유 정보와 내 키 파일 일치 여부

  • 스터디 팀원분이 이렇게 해도 안된다고 하여 이 단계로 넘어오게 되었다.

  • 서버에는 어떤 키 파일로 접속을 할 수 있는지에 대한 정보를 보관하게 되고
    거기 있는 정보에 대한 키 파일로만 접속을 할 수 있게 된다.


이렇게 접속이 안되는 상황을 대비해 클라우드 서비스들은 자체 콘솔에서 인스턴스 접속을 할 수 있도록 지원해준다.


(1) EC2 콘솔의 내 인스턴스를 선택해 연결 버튼 클릭


(2) 연결 을 클릭해 접속!


(3) 등록된 authorized_keys 정보를 확인한다.

ubuntu@yourip:~$ cd
ubuntu@yourip:~$ cd ~/.ssh
ubuntu@yourip:~/.ssh$ ls
ubuntu@yourip:~/.ssh$ sudo cat authorized_keys

authorized_keys 자체가 없거나 본인이 소유한 키 파일과 정보가 다르면 접속 인가가 나지 않는다.

위 이미지의 mykey 는 본인이 소유한 키파일 이름이다. EX) mykey.pem

아예 존재조차 하지 않았다면 그냥 두고 있다면 노란 박스 부분을 제외한 저 이상한 문자들을 복사해 잘 저장해둡니다.


(4) 내 키 확인하기

본인 키.pem 파일을 메모장으로 열어 내용물을 확인해보면 서버에 있는 정보와 형식 자체가 아예 다른 걸 알 수 있다.


그럼 어떡하나요

변환하면 된다. pem 형식의 내용물을 서버에 저장된 형태인 ssh 공개키 형태로 바꿔 출력해준다.

$ ssh-keygen -f mykey.pem -y

변환하니까 아까 서버에 있던 그 형태가 나왔다.


(5) 비교하기

서버의 값과 내 키에서 얻은 값이 동일한지 비교합시다.


(6) 키 정보가 다르다면

다르면 당연히 접속이 안되기 때문에 서버의 키 정보를 변경해주어야 합니다.

똑같은 형태로 바꿔줄 것이다.

ssh-rsa 내용물 본인키이름

다시 콘솔에서 접속한 ec2 서버로 돌아와 다음과 같이 입력해줍니다.

authorized_keys 가 있었던 없었던 상관없습니다.

sudo vi authorized_keys

내용물을 모두 지워주고

메모장에 해당 포맷으로 작성해 붙여넣기를 해줍니다.

내 키파일로 부터 얻은 ssh 키 값을 그대로 대체해주는 것입니다.

붙여넣었다면 화면에서 그대로 : 입력 후 wq 를 입력해 저장!


(7) 접속 시도해보기

실수한 게 없다면 키 파일 정보가 같아졌기 때문에 접속이 되어야 합니다.

요렇게 접속이 잘 되면 성공!


구글링 좀 해보니 될 것 같아서 직접 해보면서 도와드렸는데 되서 다행이었다.

사실 사용하면서 저렇게 인증키 정보가 달랐던 적이 한 번도 없었는데

역시 무슨 일이든 언제 어떤 문제가 어떻게 발생할 지 모르기에 늘 긴장해야 하는 것 같다! ㅎㅎ

접속이 잘 되었을 때 안도의 한숨을 내쉬었다.


Reference

profile
강해지고 싶은 주니어 프론트엔드 개발자
post-custom-banner

2개의 댓글

comment-user-thumbnail
2023년 9월 30일

덕분해 해결했습니다.. 감사합니다..!

답글 달기
comment-user-thumbnail
2024년 7월 5일

질문이 있습니다.
authorized_keys 와 나의 키의 다른 점은
authorized_keys 안에는 name.pem가 있었고
나의 키 안에는 name.pem이 마지막에 적혀 있지 않았습니다.
그러면 나의 키 안에 name.pem을 적어주어 똑같게 만들어주어야 하는건가요?

답글 달기