티스토리 뷰


Bitbucket Private Repository를 ssh key를 이용하여 git clone 해오기



bitbucket의 private 저장소를 로컬로 받아오려면 두가지 방법이 있다. (내가 아는한..?)

  1. ssh 프로토콜를 이용하여 clone
  2. http 프로토콜을 이용하여 clone
예를 들어, ssh 프로토콜을 이용한 bitbucket의 ssh-key-add 리포지토리의 복제는 
git clone git@bitbucket.org:junk3843/ssh-key-add.git

와 같다. 


그리고 http 프로토콜을 이용한 bitbucket의 ssh-key-add 리포지토리의 복제는

git clone https://junk3843@bitbucket.org/junk3843/ssh-key-add.git

와 같다. 

이때 http 프로토콜을 이용한 방법에서는 bitbucket 유저의 비밀번호를 입력을 추가적으로 받을 수도 있고, 

git clone https://junk3843:비밀번호@bitbucket.org/junk3843/ssh-key-add.git

와 같이 

git clone https://사용자이름:비밀번호@저장소위치

로 한번에 clone을 할 수 있다.



그런데 ansible과 같은 프로비저닝툴을 이용하여 private repository를 받아오려면,

http 프로토콜을 이용한 clone은 좋지 않은 방법이라고 본다. (자동 배포를 위한 ansible playbook에 아이디랑 비밀번호를 하드코딩해야하니.)


그래서 ssh를 이용하여 bitbucket의 private 저장소를 clone해오는 것을 해보고자 한다.



현재 아래와 같이 ssh-key-add라는 private repo가 있고 이걸 local에 ssh를 통해서 받아오고자 한다.




로컬의 임의의 위치에 

git clone git@bitbucket.org:junk3843/ssh-key-add.git

를 쳐보지만,




Cloning into 'ssh-key-add'...

conq: repository access denied.

fatal: Could not read from remote repository.


Please make sure you have the correct access rights

and the repository exists.


라는 메시지와 함께 git clone 명령이 거절된다.

왜냐하면 ssh key가 없기 때문이다. 


ssh를 통해 bitbucket 저장소를 받아오려면 

로컬 머신에 ssh public key, private key가 존재해야 하고, bitbucket 사이트에 공개키가 등록이 되어야한다.



SSH key 생성하기


먼저 ssh key를 생성해보자.

ssh-keygen이라는 프로그램을 통해서 리눅스나 맥의 ssh키를 생성할 수 있다.


$ ssh-keygen -t rsa

여기서 옵션 t는 생성할 키의 type을 정하는 것이고 rsa를 설정하겠다는 뜻이다.


이 커맨드를 입력하고 나면


Enter file in which to save the key (/Users/eminentstar/.ssh/id_rsa):

라는 key를 어디에 저장할 것인가 에대한 경로 및 파일 이름을 입력하라고 나온다. 

ssh키는 홈디렉토리의 .ssh에 저장하며, 아래의 사진에서는 홈디렉토리/.ssh/bitbucket_add_ssh 라는 키를 생성한다고 하였다.

그다음에는 

Enter passphrase: 

라는 것이 나오는데, 이 passphrase는 private key를 암호화하는데 사용되는 암호라고 하는데, 잘은 모르겠다. 

이 passphrase가 없으면 아무나 key를 가지고 있으면 접속이 가능하다고 한다. (사용방법은 http://iehwang.egloos.com/m/2775840 참조)


일단 passphrase는 그냥 엔터를 친다.




그러면 private key(bitbucket_add_ssh) 와 public key(bitbucket_add_ssh.pub)가 .ssh에 생성된 것을 확인가능하다.





Bitbucket에 SSH public key 등록하기


등록을 위해선 공개키의 내용을 복사해야하는데, 아래의 커맨드로 복사를 한다.


$ cat ~/.ssh/bitbucket_add_ssh.pub | pbcopy



그리고 bitbucket의 해당 리포지토리로 가서 Settings > Deployment Keys 로 가서 Add Key 버튼을 클릭한다.

그리고 방금 cat / pbcopy로 복사한 공개키 내용을 복사하고, Label은 임의로 설정한다.





그리고 git clone을 하면 받아진다.




permission denied 오류가 나는 경우


간혹 가다 위의 과정을 다했는데도 아래의 에러 문구와 함께 clone이 안되는 경우가 있다.


Permission denied (publickey).

fatal: Could not read from remote repository.


Please make sure you have the correct access rights

and the repository exists.


이경우에는 두가지의 원인이 있을 수 있는데, 
  1. 로컬의 개인키와 쌍으로 묶여있는 공개키가 bitbucket 저장소에 추가되지 않은 경우
  2. 로컬머신의 private key를 관리하는 SSH Agent가 load된 identity file(private key)을 가지고 있지 않은 경우

가 있을 수 있다.


1번의 경우는 bitbucket에서 확인이 가능할테고, 

2번의 경우에 대해서 알아보고자 한다.


가장 먼저 ssh-agent가 켜져 있는지 확인을 한다.

  • $ ps -e | grep ssh-agent

ssh-agent가 켜져있다면 

  •   603 ??         0:00.06 /usr/bin/ssh-agent -l
와 같은 출력이 뜰 것이다. 

ssh-agent가 켜져있지 않다면
  • $ ssh-agent /bin/bash

로 ssh-agent를 실행한다. 


그리고 ssh-add를 통해 identity file(private key; 여기선 bitbucket_add_ssh)를 추가한다.

  • $ ssh-add ~/.ssh/bitbucket_add_ssh
그 후에는 
  • $ ssh-add -l
을 통해 키의 fingerprint가 출력되는것을 확인해야만 한다.








'형상관리' 카테고리의 다른 글

Bitbucket Private Repository를 ssh key를 이용하여 git clone 해오기  (0) 2016.10.13
기능변경과 외관변경을 분리하자  (0) 2016.10.12
GitHub Flow  (0) 2016.10.06
Pull Request  (0) 2016.10.04
git 기본 설정 및 기본 사용  (0) 2016.10.01
댓글
댓글쓰기 폼
공지사항
Total
93,641
Today
5
Yesterday
8
«   2019/06   »
            1
2 3 4 5 6 7 8
9 10 11 12 13 14 15
16 17 18 19 20 21 22
23 24 25 26 27 28 29
30            
글 보관함