logo

English

이곳의 프로그래밍관련 정보와 소스는 마음대로 활용하셔도 좋습니다. 다만 쓰시기 전에 통보 정도는 해주시는 것이 예의 일것 같습니다. 질문이나 오류 수정은 siseong@gmail.com 으로 주세요. 감사합니다.

Git 서버 구축 - 우분투[Ubuntu]

by digipine posted Nov 02, 2017
?

Shortcut

PrevPrev Article

NextNext Article

Larger Font Smaller Font Up Down Go comment Print
?

Shortcut

PrevPrev Article

NextNext Article

Larger Font Smaller Font Up Down Go comment Print

우분투에서 Git 서버를 구축하는 방법에 대한 설명으로 협업환경을 구축하거나 로컬 저장소 이외의 백업저장소의 개념으로 사용될 수 있습니다.

 

Git 서버를 구축하기전에 GitHub나 Gitlab등을 온라인으로 무료로 사용할 수 있음을 고려해봐야 한다. 공개형 프로젝트라면 GitHub를 비공개형 프로젝트라면 GitLab을 사용하면 굳이 따로 서버를 마련할 필요가 없다.

 

  Git GitHub GitLab
서비스 유형 패키지/소스 설치 제공  온라인 서비스 패키지/소스/온라인 서비스 제공
온라인 서비스 제약 없음 공개 프로젝트는 유료 저장소당 1Gb의 용량제한

아래에선 OpenSSH 서버가 설치되어 있고 프로토콜로 SSH를 사용한다는 가정하에 진행한다.

 

Git 최신버전 설치

 

우분투 12.04.02에서 git 설치시 1.7.9 버전이 설치된다. 최신버전을 사용하기위해서는 PPA를 사용해야 한다.
PPA를 사용할 때 쓰는 add-apt-repository 명령어가 작동하지 않으면 python-software-properties를 설치하고, 그래도 문제가 생기는 경우에는 software-properties-common을 설치하면 된다.
sudo add-apt-repository ppa:git-core/ppa
sudo apt-get update
sudo apt-get install git-core
git version

 


Git 접근 권한 관리

 

git에 접근하는 권한을 설정하는 방법에는 아래와 같은 세가지 방법이 있다.


1. SSH로 접근가능한 유저들의 계정을 생성하는 방법

이 방법은 서버에 접근할 유저들의 계정을 생성해주고 접근할 저장소에 권한을 부여해야 되기 때문에 보안상 아래의 두가지 방법보다 취약하고 관리자의 노고가 따르기 때문에 추천하지 않는다.

 

2. 대표계정(git)을 생성해 접근하는 사용자 관리

이 방법은 대표유저(git)를 생성하고 SSH key를 이용해 등록된 사용자에게 최소한의 권한을 부여하는 방식으로 권한 설정이 복잡하지 않은 저장소를 이용할때 많이 사용한다. 다만 저장소에 접근이 허락된 사용자들은 다른 저장소 또한 push / pull 이 가능하기에 세심한 주의가 필요한 경우에는 추천되지 못한다.

 

3. gitolite 툴을 이용한 접근 관리

여러개의 저장소를 운영하고 각각의 접근 권한을 원하는데로 설정하기 위해 추천되는 방식이다. 각각의 branch, tag, 저장소별 접근 권한을 설정할 수 있고 그룹관리가 가능해진다. 또한, 공개/비공개형의 저장소 설정이 편리하다.
여기서는 2번의 방법에 대한 설명을 하고 차후 3번의 방법을 설명한다.
대표계정(git)을 생성해 접근하는 사용자 관리

대표계정을 생성하고 저장소 권한 변경

 

# 사용자 생성, 비밀번호 입력
sudo adduser git

 

# git 사용자로 로그인
su git

 

 

Git 원격 저장소 설정


위에서 생성한 git 계정은 커밋(commit)에는 아무런 영향도 끼치지 않고 접속하는데 사용된다.
git 사용자의 홈 디렉토리에 SSH-key 등록

 

# 홈디렉토리로 이동
cd ~  

 

# .ssh 디렉토리 생성
mkdir .ssh

 

# 권한 변경
chmod 700 .ssh  

 

# 서버로 공개키를 전송하고 등록
cat id_rsa.pub >> ~/.ssh/authorized_keys

 

# 권한 변경
chmod 600 ~/.ssh/authorized_keys

 

# 전송받았던 사용자키 삭제
rm -rf id_rsa.pub


git 저장소에 접근허가를 할 사용자들의 공개키를 어떤 방식으로든 전송받아(이메일) 계속 등록해주면 된다.
접근 테스트는 ssh git@서버주소로 접속해서 암호를 묻지않고 바로 접속되면 SSH-Key 등록이 완료된 것이다.

 

 

보안을 위한 쉘기능 제한

 

git 계정으로 접속한 유저들이 할당된 권한으로 서버를 휘젓고 다니면 안되므로 이를 제한한다.
sudo vi /etc/passwd

  git:x:1001:1001:,,,:/home/git:/bin/bash


위의 git 계정을 찾아 /bin/bash 부분을 /usr/bin/git-shell 로 변경한다.
git:x:1001:1001:,,,:/home/git:/usr/bin/git-shell

 

다시 접속해보면 접속이 거부된다.

최초로 원격저장소를 생성하는 경우

 

cd /home/git/repos/test_project.git
git init --bare --shared
git remote add origin ssh://git@192.168.1.22/home/git/repos/test_project.git
git add .


git commit -m "inital commit"
git add README.TXT
git commit -m "first commit"
git push origin master

 

기존에 사용하던 저장소가 있는 경우

git clone --bare --shared URL주소

 


접근 테스트

 

클라이언트에서 리모트 저장소를 내려받는다.
git clone ssh://git@서버주소/home/git/repos/test_project.git

 

기존에 사용하던 remote 제거하기
git remote remove origin


TroubleShooting

레파지토리 퍼미션에 문제가 있다면 다음 오류 구문을 보게 될것이다.
insufficient permission for adding an object to repository database ./objects
해당 레파지토리로 이동해서 다음을 실행하자.


cd /home/git/repos
sudo chmod -R 770 *

 

그래도 안된다면 다음과 같이 sharedrepository옵션을 true로 지정하자.
sudo git config core.sharedrepository true

 

TAG •

List of Articles
No. Subject Author Date Views
104 TCP/IP State Transition - TCP 스택 포팅 시 참조 file digipine 2017.11.02 195189
103 언어 IDE 별로 git ignore 파일을 자동으로 만들어 주는 사이트 엉뚱도마뱀 2018.12.17 122618
102 What is Android Repo? and Manual, Download file digipine 2017.11.02 99667
101 [Linux] ubuntu 16.04에 QT Creator 설치하기 digipine 2017.11.02 24344
100 [Swift, MacOS] 맥 한글 파일명이 윈도우에서 자소 분리되는 현상 해결, NFD, NFC 엉뚱도마뱀 2018.12.11 20080
99 Linux init.d 에서 등록하기. 부팅 시 자동실행 설정 digipine 2017.11.03 12623
98 FFT (Fast Fourier Transform) 고속 푸리에 변환 예제 소스 digipine 2017.10.29 12548
97 Photoshop CC 2018 한글 영문 변환 언어팩, 포토샵 언어변경 file 엉뚱도마뱀 2018.07.04 8531
96 Phabricator 설치 가이드 우분투 16.04 기준 digipine 2017.11.02 6193
95 ATmega8 MCU 간의 TWI 기능을 이용한 I2C 통신 digipine 2017.11.02 5998
94 WinPCap과 Ethereal, Wireshark 을 이용한 스니핑(Sniffing) digipine 2017.10.29 5428
93 공짜 무료 C/C++ 컴파일러들 file digipine 2017.10.28 4378
92 난수발생기 개론 엉뚱도마뱀 2017.11.22 4318
91 비밀번호 해쉬에 Salt(소금) 첨가하기 file 엉뚱도마뱀 2017.11.23 4273
90 [iOS] Bluetooth로 App을 백그라운드 모드로 실행는 방법 lizard2019 2020.02.11 3524
89 OpenAL 사용법 정리 1 digipine 2017.11.01 3398
88 [Linux, OSX] pfctl - Packet FIlter Control 사용법 digipine 2017.11.02 3187
87 Xcode 없이 맥에 '명령어 라인 도구(Command Line Tools)'를 설치하는 방법 엉뚱도마뱀 2018.12.26 2859
86 WIN CE, GPS - NMEA protocol - GPS Virtual Driver digipine 2017.10.28 2829
85 초고속망 통신사 DNS 서버 주소 모음 - DNS 설정 digipine 2017.11.03 2630
Board Pagination Prev 1 2 3 4 5 6 Next
/ 6