git server 생성 후 git repository 전체를 관리하기 위해 gitolite를 사용하게 되었다.
아래의 순서대로 진행.
개발환경
- 서버 : CentOS
- 클라이언트 : Mac
- Git 설치 및 Setting 완료 가정
0. 계정생성 (계정생성 및 권한설정은 생략)
- 필요계정 (본인의 경우 아래 세개의 계정이 필요했다.)
user : 실제 repo를 pull & push 할 계정 (다수의 사용자)
git_repo : git repo 계정 및 repository 관리용 admin 계정
git_adm : git repo 로 접속하여 파일을 관리할 계정
# 차후 설명하겠지만 git_repo계정 등록 후 해당 계정으로 ssh 통신으로 연결하여 관리하는 것이 안되는 경우(이게 정상이라고 생각됨)가 있어 ssh 계정 연결용 git_adm 계정을 생성하였음.
1. admin 계정(여기서는 git_repo) ssh 공개키 생성 및 서버 전송
- 공개키 생성 (Local 경로 : ~/.ssh)
$ ssh-keygen |
# 생성된 키는 id_rsa (개인키) 와 id_rsa.pub (공개키)
- 공개키 전송 (Server 경로 : server 의 gitolite 설치경로, 여기서는 ssh 연결 후 ~/.ssh)
#서버에 .ssh 폴더가 없다면 생성 (Server 경로 : ~/)
$ mkdir .ssh |
# 공개키 전송 (gitolite 설치 시 공개키 명이 admin 명으로 설정되기 때문에 공개키 이름은 admin 계정명으로 쓰는게 좋음)
$ scp ~/.ssh/id_rsa.pub <계정명>@<도메인>:<.ssh의 절대경로>/<계정명.pub> $ scp ~/.ssh/id_rsa.pub git_repo@10.0.10.1:/home/git_repo/.ssh/git_repo.pub |
2. gitolite clone
$ git clone https://github.com/sitaramc/gitolite.git |
# 회사 server에서 위의 clone 이 안될 경우 server git에서 http(s) proxy 설정 후 재시도
- git proxy 설정 방법
$ git config --global http.proxy "0.0.0.0:1234" $ git config --global https.proxy "0.0.0.0:1234" |
3. gitolite install (Server 경로 : gitolite를 clone 받은 경로)
$ ./gitolite/install |
# intall 후에 .../gitolite/src/gitolite 생성
4. gitolite setup (Server 경로 : gitolite를 clone 받은 경로)
# 전송시킨 admin의 공개키로 설치.
$ ./gitolite/src/gitolite setup -pk ./.ssh/git_repo.pub |
5. gitolite 연결 확인(ssh 연결 종료 후 재연결 시)
$ ssh git_repo@10.0.10.1 |
# 제대로 설치 되었다면 아래 그림처럼 표시되며 접속 종료됨.
# 오직 관리자 계정에서만 gitolite-admin이 표시되며, gitolite-admin 프로젝트에서 모든 계정 및 repository를 관리.
# 만약 여기서 ssh 접속 시 위와같은 화면이 나오지 않고 패스워드를 묻거나 패스워드입력 후 ssh 접속이 되면 안된다! (대부분의 블로그에 이부분에 대한 설명이 별로 없는데, 접속이 안되는게 정상인지는 잘 모르겠으나 다음에 진행할 내용들에 연관이 있는 점은 분명함.)
# 만약! 위와같이 표시되지 않는다면 다음과 같은 이유일 것이다. ssh 접속 연결 시 키인증을 하게되며, gitolite가 해당 키인증을 가로채 인증확인을 하게된다. 이 때 중요한 부분이 등록된 키를 매칭시키는 것인데 이 부분에서 인식하지 못해 발생하는 문제라고 보여진다.(5** 참고)
# 해당 문제를 해결하기 위해 우선 설치 시 생성되는 구조부터 살펴볼 필요가 있다.
---------- 5. 번을 정상등록하였다면 5** 과정 생략 ----------
5*. gitolite 구조
- gitolite 설치 시 생성되는 구조
# 구조를 확인하기 위해서, 그리고 git_repo(admin) 계정의 파일관리를 위해서 git_adm 계정을 만들어 두었다.
# ssh에 공개키가 등록되지 않은 계정 (여기서는 git_adm)에서는 git_repo 접속이 가능하다.(위에 말했듯 gitolite에 공개키가 정상적으로 등록되면 ssh 연결 시 가로채기 당하므로 접속불가)
# gitolite 설치 시 생성되는 구조는 아래그림과 같음.
.bash_****** .gitconfig .gitolite - conf - gitolite.conf - hooks - keydir - logs .gitolite.rc .ssh - authorized_keys gitolite projects.list repositories |
계정 정보 (gitolite 와 무관) git config 관련 정보 (gitolite 와 무관) gitolite 설정 관련 폴더 gitolite repository 설정관련 gitolite repository 경로 및 사용자 접근권한 설정 파일 (중요!!!) gitolite hook 관련 gitolite 공개키 저장 폴더 (중요!!!) - gitolite-admin 에서 추가/삭제 gitolite 변경내역 로그 gitolite rc 파일 ssh 연동 관련 폴더 ssh 연동 키 등록정보 (중요!!!!!) 처음에 clone 했던 gitolite 설치 폴더 모든 프로젝트 리스트 - gitolite.conf 변경 시 자동 변경 모든 repository 저장소 (폴더 내 gitolite-admin 매우 중요!!!) |
5**. authorized_keys 확인
- 경로 : ~/.ssh/authorized_keys
# vi or nano 를 사용하여 open
$ vi ~/.ssh/authorized_keys |
# 아래 그림과 같이 # gitolite start ~ # gitolite end 만 존재해야한다. 만약 해쉬태그 밖에 무언가 키 등록이 되어있다면 삭제해야 정상적으로 인식함
# 위에선 3개의 키가 등록되어 있으며, admin pub key 는 git_repo로 등록된걸 볼 수 있음.
6. gitolite-admin.git clone
- 로컬로 복귀해서 git_repo 공개키와 연동된 계정 (admin 계정) 에서 clone (Local 경로 :gitolite-admin 받을 아무데나)
$ git clone git_repo@10.0.10.1:gitolite-admin.git |
# 여기서 굉장히 중요한 것은 도메인 세미콜론 뒤에 절대경로를 적지 않아야 한다는 점이다!
# 위의 공개키-개인키 인증이 정상적으로 인식됐으면 절대경로가 필요없으며, 절대경로로 clone할 시 향후 git push에서 문제가 발생하므로 상대경로로 사용해야함.
7. 사용자(user) 등록
# gitolite는 상호 인증키(공개키-개인키) 인증 기반이므로 등록하려는 사용자의 id_rsa.pub (공개키) 를 admin이 받아서 등록해주어야한다.
# 위에서 clone한 gitolite-admin을 보면 폴더안에 두 개의 폴더가 존재하는데, 내용은 아래와 같다.
conf/gitolite.conf |
등록된 모든 repository 및 접근권한 설정파일 (변경 시 server gitolite의 ~/.gitolite/conf/gitolite.conf 에 기록됨) |
keydir |
등록된 모든 공개키 (변경 시 server gitolite의 ~/.ssh/authorized_keys 에 기록됨) (변경 시 server gitolite의 ~/.gitolite/keydir/ 에서 key들이 변경됨) |
- 사용자(user) rsa_id.pub (공개키) 등록
# 사용자에게 전달받은 rsa_id.pub 을 이름을 변경 user.pub 하여 keydir안에 복사한다.
# user.pub을 추가하면 반드시 순서대로 add -> commit -> push 를 해준다. (Local 경로 : .../gitolite-admin/)
$ git add ./keydir/user.pub $ git commit -a -m "add user 'user'" $ git push |
---------- 아래는 skip 가능 ----------
# push 중 아래와 같은 warning이 발생할 경우 vi로 해당 공개키 (user.pub)을 열어 확인해보면 line이 2줄로 되어있는 경우이다.
remote : WARNING : keydir/user.pub does not contain exactly 1 line; ignoring |
# vi로 열어보면 아랫줄이 개행이되있는 경우가 있는데, 편집모드로 비어있는 개행줄을 삭제 후 저장한 뒤 아래와 같이 다시 시도해야함.
(user.pub 삭제 -> git commit -> git push -> user.pub 빈 개행줄 삭제 -> 수정한 user.pub을 keydir안에 추가 -> git add -> git commit -> git push)
# 위 같은 경우가 아니면서 push가 제대로 되지 않는다면 gitolite-admin.git을 clone할 때 절대경로를 사용했을 가능성이 있는지 확인한다. (절대경로 사용 X)
---------- 여기까지 skip 가능 ----------
# 사용자 등록이 정상적으로 완료되면 사용자가 어드민 계정에 ssh 연결을 시도할 때 아래와같이 표시되어야 한다.
user_local$ ssh git_repo@10.0.10.1 |
# user와 admin의 차이는 gitolite-admin 이 위 목록에 보이는지 여부이다. 당연히 gitolite-admin 프로젝트에서 모든 프로젝트 경로 및 접근제어와 유저관리를 하므로 admin 계정만 gitolite-admin 이 보이는게 지극히 정상.
# user는 위의 접속 내용으로 자신이 어느 프로젝트에 접근 가능한지, 그 프로젝트 경로가 어떻게 되는지 파악할 수 있다.
8. 프로젝트 신규 추가
# git_repo 계정의 로컬에 clone 받은 gitolite-admin 프로젝트의 conf 로 이동 (Local 경로 : .../gitolite-admin/conf)
# vi 또는 nano를 이용하여 gitolite.conf 를 편집
$ nano gitolite.conf |
# 아래와 같이 repo New-Project 추가
# RW+ 는 접근권한설정 @all 은 모든사용자 읽고쓰기용 접근 가능 (접근권한 설정에 대한 자세한 내용은 검색 요망)
# 저장 후 편집창을 닫고 git commit, push 해준다.
$ git commit -a -m "add project 'New-Project'" $ git push |
# 정상적으로 push가 완료되면 server의 git_repo계정 repositories 밑에 새로운 프로젝트가 생기며, git 명령어를 사용한 새 저장소 생성과 같은(git init --bare) 방식의 구조로 생성된 것을 확인할 수 있다. (git_adm 계정으로 확인함)
# 그 후 기존 git과 같이 사용하면 된다.
# 기존에 server에서 사용중이던 git 프로젝트가 있다면, 다음 두가지 방법으로 gitolite 계정에 옮길 수 있다.
(1) mv/cp 등의 명령어를 이용해 repositories 폴더 내로 이동/복사 한 후 git_repo 계정의 로컬에서 gitolite.conf에 위와 같은 방식으로 경로와 접근권한을 추가한 후 commit, push 한다.
(2) 위와같이 새로추가하는 방식으로 gitolite.conf 추가 후 server에서 사용중이던 git을 로컬에서 clone 한 뒤 origin 경로를 바꾸어 다시 add, commit, push 한다.
(2)번과 같은 경우는 기존 push Log가 날라가기 때문에 (1)번을 추천.
9. admin계정인 git_repo 에 등록된 PC를 바꾸는 방법.(관리자 PC 교체)
# repositories에 gitolite-admin 프로젝트는 모든 사용자와 프로젝트 경로 및 접근제어를 관리하며, 오직 admin 계정으로 등록된 PC에서만 접근 및 clone이 가능하다.
# 관리자가 변경되거나 관리자PC가 변경되면 필히 관리자 공개키 재등록을 해줘야한다.
# 1.과 같이 새 관리자PC의 공개키/개인키 생성 후 공개키를 서버로 보낸다.
# 4.와 같이 이미 설치된 gitolite에서 다시 새로운 공개키로 setup을 하면 관리자 PC가 변경된 것을 확인할 수 있다.
# 새 관리자 PC에서 공개키로 gitolite setup 후 ssh로 git_repo에 접속하여 아래와 같이 표시되면 적용완료. (단, gitolite-admin 프로젝트가 반드시 보여야함)
'Tools' 카테고리의 다른 글
[git/gitlab] how to clone with gitlab ID/PW in console (0) | 2019.02.18 |
---|---|
sitemap (0) | 2019.02.15 |
[Git] Git 저장소 생성 및 초기 설정 (0) | 2017.07.14 |
[Git] Git ignore list (0) | 2017.07.14 |
[atom] convert MD(mark down) to pdf (0) | 2017.07.05 |