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
25 ATmega8 MCU 간의 TWI 기능을 이용한 I2C 통신 digipine 2017.11.02 1526
24 Mac Address 를 String 으로 변환하는 간편한 방법 digipine 2017.11.02 161
23 What is Android Repo? and Manual, Download file digipine 2017.11.02 419
22 Compile FFmpeg on Ubuntu, Debian, or Mint digipine 2017.11.02 196
21 Wi-Fi display (miracast) FFMpeg MpegTs Supported digipine 2017.11.02 718
20 Iconv 사용법 소스 digipine 2017.11.01 751
19 WPA_SUPPLICANT 빌드 방법 digipine 2017.11.01 350
18 WPA_SUPPLICANT 빌드 방법 digipine 2017.11.01 163
17 OpenAL 사용법 정리 1 digipine 2017.11.01 2560
16 QCAD 1.1 한국 최초의 2D CAD 소프트웨어 file digipine 2017.11.01 539
15 Ubuntu Server OS 한국어 모드로 설치 후 서버 콘솔에서 한글 깨짐 해결 방법 digipine 2017.10.31 463
14 Linux(리눅스) 파일 시스템 정리 (ext, ext2, ext3, ext4) digipine 2017.10.29 636
13 FFT (Fast Fourier Transform) 고속 푸리에 변환 예제 소스 digipine 2017.10.29 5746
12 WinPCap과 Ethereal, Wireshark 을 이용한 스니핑(Sniffing) digipine 2017.10.29 277
11 Windows에서 SVN 용 폴더 한 번에 삭제하기 digipine 2017.10.29 254
10 NMEA-0183을 이용한 GPS 애플리케이션 제작 digipine 2017.10.28 232
9 WIN CE, GPS - NMEA protocol - GPS Virtual Driver digipine 2017.10.28 1856
8 WIN CE C++ 시리얼 제어 방법 digipine 2017.10.28 245
7 Windows API - 안전한 문자열 함수들 digipine 2017.10.28 192
6 Thread간 동기화관리자 digipine 2017.10.28 335
Board Pagination Prev 1 2 3 4 5 Next
/ 5