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 Visual Studio 단축키 정리 digipine 2024.03.28 0
103 프로그래밍 언어 순위 2023년 file digipine 2023.10.30 142
102 Docker 모든 컨테이너를 Stop 또는 Remove 하는 방법 digipine 2021.09.01 202
101 FFServer RTSP Audio Server Config digipine 2023.05.12 224
100 이벤트 텍소노미(Event Taxonomy)란 무엇인가요? digipine 2023.08.11 243
99 OBS Studio for Http Interface EXE lizard2019 2023.02.15 247
98 Git Commnd 사용법 정리 digipine 2017.11.02 263
» Git 서버 구축 - 우분투[Ubuntu] digipine 2017.11.02 307
96 Compile FFmpeg on Ubuntu, Debian, or Mint digipine 2017.11.02 327
95 mongoose 3.8 싱글 파일 소스 코드 file digipine 2020.09.01 335
94 WPA_SUPPLICANT 빌드 방법 digipine 2017.11.01 338
93 AWS EC2 Ubuntu 용 Docker 설치 스크립트 digipine 2021.09.01 345
92 Windows API - 안전한 문자열 함수들 digipine 2017.10.28 354
91 JDK Install ubuntu digipine 2017.11.02 355
90 Remove all .git files, recursively digipine 2021.11.26 366
89 Ubuntu 18.04 에서 vsftpd 설치하기 lizard2019 2021.03.02 373
88 Ubuntu Git - Latest Version Install digipine 2017.11.02 375
87 ALM의 등장 배경, 오해와 진실 digipine 2017.10.28 376
86 MAC Screen Sharing을 위한 VNC 접속을 위한 Port 변경 방법 digipine 2022.09.05 381
85 xcode xib encountered an error communicating with ibagent-ios 해결 digipine 2022.10.06 382
Board Pagination Prev 1 2 3 4 5 6 Next
/ 6