문제 발생

최근 맥북프로를 장만하고 git, github을 개인 계정으로만 사용하고 있었다. 8/8일… 최악의 폭우로 인해 2일간 재택근무를 하게 되었다. 회사 업무는 데스크탑으로 했기 때문에 노트북을 사용할 일이 없었지만 급작스러운 재택 때문에 회사 업무관련 개발환경을 전부 셋팅해야 했다.

여기서 발생한 문제

  • ssh-key를 회사 github 계정에 등록했는데 Permission Error가 발생했다.

해결 방법은 간단했다.

  1. ssh-key 생성
  2. ssh-key 등록
  3. ssh config 파일 작성
  4. github 계정에 ssh-key 등록
  5. 로컬 저장소별로 .git config 파일 수정


ssh-key 생성

  • ~/.ssh로 이동한다.
  • 만약 존재하지않으면 생성 후 이동
$ mkdir ~/.ssh
$ cd ~/.ssh


  • 이동 후 ssh-key를 생성
$ ssh-keygen -t [암호화 방식] -b [생성 Key 크기] -C 'GitHub 계정 메일'
구분 내용 비고
암호화 방식 ssh-key의 암호화 방식 rsa 방식 사용
생성 Key 크기 3072(default)~4096  
GitHub 계정 메일 GitHub 생성 시 등록에 사용한 메일 주소 우측상단 > Settings > Emails
$ ssh-keygen -t rsa -b 4096 -C "your_email@gmail.com"

명령어를 실행하면 아래와 같이 나올 것이다. 생성할 파일의 이름을 적어달라는 것인데. 그냥 엔터를 누르면 id_rsa라는 이름으로 저장된다. 따로 저장할 이름이 있으면 작성하면 된다. 나는 개인 github 계정에 넣을거라 sikbook이라고 작명했다.

image

파일 명을 작성하고 엔터를 누르면 비밀번호를 입력하라고 하는데 엔터를 누르고 넘어간다.

Enter passphrase (empty for no passphrase):
Enter same passphrase again:
Your identification has been saved in sikbook
Your public key has been saved in sikbook.pub
The key fingerprint is:
SHA256:aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa your_email@gmail.com
The key's randomart image is:
+---[RSA 4096]----+
|          ..+..=+|
|           * +=.+|
|      o   + +E=oo|
|       + . =+@ o=|
|      . S . B+=.+|
|     . .      .o.|
|    .   ..    +  |
|  .. . ....  o . |
| .... .....  .o  |
+----[SHA256]-----+

여기서 중요한건 Enter file in which to save the key (/Users/sikbook/.ssh/id_rsa): 이 부분이다. 구분할 수 있는 이름으로 작명해야 등록할 github 계정에 잘 등록할 수 있다.


  • ls 통해 .pub 파일과 그냥 파일이 생성된 것을 확인할 수 있다.
  • sikbook.pub 파일은 공개키이고
  • sikbook은 비밀키이다.
$ ls
> sikbook   sikbook.pub


ssh-key 등록

ssh-key를 생성했다면 키를 ssh-agent에 록해줘야 한다. 그 이유는, 등록하지 않으면 매번 비밀번호를 입력해야하는 수고스러움이 있기 때문이다.

만약 ssh-agent 가 실행중이라면 한번이라도 push를 할 경우 자동으로 key가 등록되며, key에 비밀번호가 있는 경우에는 최초 한번만 입력하면 된다.

아래와 같이 ssh-add [생성한 ssh-key의 경로]로 등록하면 된다.

  • 비밀키는 나의 ssh-agent에 등록하는 것이다.
  • 공개키는 github계정에 등록하는 것이다.
# SSH 에이전트 백그라운드로 실행 
eval "$(ssh-agent -s)"
$ ssh-add ~/.ssh/sikbook


아래와 같이 나오면 정상 등록 된것이다.

Identity added: /Users/sikbook/.ssh/sikbook (sungsik9831@gmail.com)


만약 아래와 같이 오류가 발생하면

Could not open a connection to your authentication agent.

아래와 같이 ssh-agent를 다시 실행한다.

$ eval $(ssh-agent)


ssh config 파일 작성

ssh config파일은 ~/.ssh 위치에서 생성한다.

$ vi ~/.ssh/config

아래와 같이 작성하면 된다.

Host github.com-[사용할 이름]
  HostName github.com
  IdentityFile [ssh-key 위치]
  User [Github 계정 이름]
구분 내용 비고
Host github.com-[사용할 이름] 원하는 이름 자주 쓸 이름으로 작명
HostName github.com  
IdentityFile ssh-key 파일 경로  
User Github 계정 이름  


github 계정에 ssh-key 등록

  • 등록할 Github 계정 > 우측 상단에 Settings

image


  • SSH and GPG keys > New SSH key

image


  • 생성한 공개키를 복사하여 넣어주면 된다.
$ pbcopy < ~/.ssh/sikbook.pub 

image


  • 설정이 완료되면 아래와같이 설정된 키의 모습이 보인다.

image


설정이 제대로 연결되었는지 테스트

  • ssh -T [ssh config HOST 명]
$ ssh -T git@github.com-sikbook
Hi s-seongsik! You've successfully authenticated, but GitHub does not provide shell access.

위와 같이 출력되면 정상적으로 연결되었다. 하지만, 서로 다른 계정의 github 저장소로 push를 할 경우 github에 등록된 public key와 쌍이되는 private key가 사용될 수 있도록 설정해 줘야한다.


로컬 저장소별로 .git config 파일 수정

이전에 .ssh config에 Host명과 사용될 비밀키를 등록했다.
이번에는 비밀키를 사용하기 위해 git config vkdlfdml remote url 도메인을 ssh에 등록된 HOST값으로 변경해줘야 한다.

git config > remote url값을 ssh config에 등록했던 HOST명으로 작성하지 않으면 Host를 찾을 수 없다거나 Permission 에러가 발생할 수 있다.

방법 1. 직접 git 명령어를 사용해서 값을 변경

$ git remote add origin git@[ssh config HOS명]:[Github 계정 이름]/[repository명].git

방법 2. 로컬 저장소 > .git > config 파일 수정

$ vi .git/config

[core]
        repositoryformatversion = 0
        filemode = true
        bare = false
        logallrefupdates = true
        ignorecase = true
        precomposeunicode = true
[remote "origin"]
        url = git@[ssh config HOS명]:[Github 계정 이름]/[repository명].git
        fetch = +refs/heads/*:refs/remotes/origin/*

확인

로컬 저장소 .git > config에서 remote url을 수정했다면 아래와 같이 리모트가 잘 수정되었는지 확인하면 끝이다.

$ git remote -v
origin  git@github-sikbook:[Github 계정 이름]/[repository명].git (fetch)
origin  git@github-sikbook:[Github 계정 이름]/[repository명].git (push)