[TIL] yarn install했을 때 Permission denied (publickey) 오류 해결하기

minami·2022년 7월 19일
0

일개미

목록 보기
1/2
post-thumbnail

1. 발단

최근 계속 어드민만 만지고 있던 나.

그래도 언제 서비스단을 또 만지게 될지 모르기 때문에 항상 팀원들이 작업해서 업데이트한 내역들을 git pull해서 최신화를 하고 있었다. 오늘도 마찬가지로 열심히 어드민쪽 작업을 하다가 중간에 잠깐 숨도 좀 돌릴 겸 서비스쪽 최신화를 했다. 프론트엔드쪽 코드는 최근에 디렉토리 구조가 다 리팩토링되어서 yarn install을 다시 해야하는 상황인지라 고민하다가 그냥 로컬에서 해당 프로젝트 전체를 날려버리고 새로 git clone을 해왔다.

그렇게 새로 git clone을 해온 나는 그냥 yarn install을 했을 뿐인데...

2. 에러 메시지

... yarn install
yarn install v
info No lockfile found.
[2/4] 🔍 Resolving packages...
...
Output:
Permission denied (publickey).
fatal: Could not read from remote repository.

Please make sure you have the correct access rights
and the repository exists.
...

짜잔! 당신의 yarn install이 실패하였습니다!

너무 어리둥절한 나머지 한 번 더 yarn install을 실행해보았지만 마찬가지였다. 이럴 수가.

하지만 나도 벌써 어엿한 10개월차 응애 개발자니까 프로답게 당황하지 않고 다른 팀원에게 물어보았더니 해당 깃 레포지토리의 권한을 확인해보라고 하여 확인해보았다. 그런데 git clone도 문제 없이 했고 해당 깃 레포지토리는 회사 레포지토리인데 권한이 없을 리가 없었다. 권한이 없었다면 어드민 작업 git push는 또 어떻게 했으며, 클론해온 레포지토리는 또 어떻게 들어가보았겠으며...

아무튼 해당 깃 레포지토리에 대한 권한 문제는 아닌 것 같았다. yarn cache clear 실행 후에 yarn install도 해보았지만 안 됐고, ssh key가 제대로 잘 있는지도 확인해보았는데 걔는 아주 잘 있었다. 똑같은 ssh key가 이미 github계정에 등록되어 있어서 같은 조직의 다른 레포지토리는 문제 없이 사용하고 있었기 때문.

그래서 다시 위의 에러 메시지에서 Output: Permission denied (publickey).에 주목하여 구 선생의 도움을 청했고, 해결할 수 있었다.

3. 해결 방법

👆 오늘의 구세주

정확히 나와 똑같은 증상을 겪는 사람이 올려둔 이슈에 달린 댓글 하나가 나를 살렸다. 저 아래로 여러 사람들이 해당 방법을 사용하니까 해결되었다고 하기에 저 명령어를 입력한 후에 yarn install을 실행해보았는데 나에게도 먹혀든 방법이었다.

ssh-add -K가 뭐야?

1. SSH부터 알아보자

SSH는 Secure Shell의 줄임말로, 안전한 시스템 관리와 안전하지 않은 네트워크를 통한 파일 전송을 가능하게 하는 소프트웨어 패키지이다. 이게 무슨 말인가 하면 SSH는 원격 시스템 접속이나 원격 시스템에서의 명령 실행 및 파일 전송을 안전하게 할 수 있는 보안 프로토콜이라는 말이다.

SSH가 원격 호스트와 로컬 호스트 간 연결을 할 때 사용하는 방식은 비대칭키 방식이다. 원격 서버가 공개 키(public key)를, 로컬 컴퓨터가 개인 키(private key)를 각각 갖고 있다가 상호간 연결을 시작할 때 두 개의 키를 가지고 인증을 한다.

  1. 클라이언트가 원격 서버에 접속을 시작한다.
  2. 원격 서버가 클라이언트에 공개 키를 전송한다.
  3. 클라이언트가 갖고 있는 개인 키와 공개 키를 비교하여 일치하면 보안 채널을 연다.
  4. 원격 호스트 서버에 접속을 완료한다.

이쯤에서 에러메시지를 다시 생각해보자.

SSH가 비대칭키 방식을 활용해서 인증을 한다. 그런데 나는 접속 허가가 거부되었다. 그리고 에러메시지에는 공개 키가 언급이 되어 있었다. 즉, 무슨 이유인지 모르겠지만 공개 키와 개인 키가 맞지 않아서 yarn install이 되지 않았다고 결론을 내릴 수가 있다.

그래서 이미 구글링을 해본 사람은 알겠지만, Permission denied (publickey)를 검색해보면 SSH 키를 새로 만들어서 github 계정에 등록하는 방법에 대한 것만 주구장창 나온다. github에서도 해당 에러메시지에 대한 해결책으로 SSH 키를 만들어서 계정에 등록하는 방법을 소개하고 있다.

하지만 나는 아예 처음부터 SSH 키를 등록하지 않았거나 모종의 이유로 키가 만료되어서 git clone 또는 git pullgit push가 안되는 상황과는 좀 달랐다. 그저 yarn install만 불가능한 상황이었기에 내 상황에 맞는 해결책을 찾고 싶었다. 사실 또 SSH 키 만들고 github 계정에 등록하고 그런 게 귀찮아서 그런 거 아님ㅎ... 그래서 찾은 해결책이 바로 ssh-add -K였던 것이다.

2. 그래서 ssh-add -K가 뭔데?

ssh-add는 내가 로컬에서 생성한 개인 키를 SSH 인증 에이전트에 등록할 때 사용하는 명령어이다. 다른 리눅스 명령어들에도 으레 옵션들이 붙는 것처럼 ssh-add에도 옵션이 여러 가지가 있다. 그중에서도 -K 옵션은 macOS에서만 사용 가능하다. 왜냐하면, macOS에서 사용하는 키체인에 내 개인 키를 등록할 때 사용하는 명령어이기 때문!

그렇다. 별 것 아니었다...

어쨌거나 이미 등록해서 잘 사용하고 있었는데 왜 이런 문제가 생긴 것인지는 아직 잘 모르겠다. 팀원에게 물어보니 해당 팀원도 전에 이런 적이 있었다고 하는데, 정확한 원인까지는 잘 모르는 듯했다🙃

사이드 이펙트?

원래는 항상 git pull 또는 git push를 할 때 일일이 github 계정 암호를 쳐야했는데, 이번에 명령어를 사용해서 개인 키를 키체인에 등록해버려서 그런지 암호를 치지 않아도 git pullgit push가 가능해졌다.

이제 git pull이나 git push 잘못하면 절대 안되는 건가...!

어쨌거나 오늘도 문제에 답을 찾아냈다.

profile
함께 나아가는 개발자💪

0개의 댓글