준비
이번 수업은 리눅스에 대한 약간의 지식을 요구 하지만 풍부한 경험은 필수 조건이 아니다.
리눅스에 대한 지식은 생활코딩의 리눅스 수업을 통해서 얻을 수 있다.
http://opentutorials.org/course/141/1007
본 수업은 '협업에 참여 (remote branch)'를 선행학습으로 한다.
본 강의는 아래의 문서 중 4장을 참고해서 만들었다.
http://dogfeet.github.com/progit/progit.ko.pdf
지원하는 프로토콜
- ssh
- local
- git
- http(s)
ssh 프로토콜의 특징
- 대부분의 서버에서 접근가능
- SSH가 가지고 있는 인증을 사용
- 누가 리모트에 접근했는지 알 수 있다.
- 설정이 상대적으로 쉽다.
- 보안이 뛰어나다.
-
데이터를 압축하기 때문에 효율적이다.
-
익명접근이 안된다.
오픈소스 프로젝트인 경우 누구나 접근할 수 있도록 익명접근이 가능한 프로토콜을 별도로 제공해야 한다.
SSH를 이용한 리모트 저장소 구축
서버에 저장소를 설치한다.
apt-get install git (ubuntu) # git을 서버에 설치한다. cd /opt; # /opt/projects/my_project를 원격저장소로 사용한다. mkdir projects; cd projects; mkdir my_project; cd my_project; git init --bare --shared; # 최초로 원격저장소를 생성하는 경우 git clone --bare --shared url; # 이미 사용중인 저장소가 있는 경우
사용자 권한을 부여한다.
sudo adduser git; # 관리자 권한으로 사용자 Git을 생성한다. su git; # 사용자 git으로 로그인 한다. chown -R git:git /opt/projects cd; # 사용자 git 의 home 디렉토리로 이동한다. mkdir .ssh; # 만약 홈 디렉토리에 .ssh디렉토리가 없다면 생성한다.
사용자의 로컬 컴퓨터에 ssh key을 생성한다.
cd ~/.ssh; # 사용자 홈디렉토리 중 .ssh 디렉토리에 id_dsa, id_rsa라는 이름의 파일이 있는지 확인한다. ssh-keygen; # ssh key 생성도구를 실행시킨다. scp id_rsa.pub git@url:/home/git/id_rsa.pub; # 공개키를 서버로 전송한다.
원격저장소의 서버에 *.pub 파일을 등록한다.
cat /tmp/id_rsa.john.pub >> ~/.ssh/authorized_keys
접속 테스트
아래와 같이 접속했을 때 로그인 절차가 없이 바로 로그인이 되어야 한다.
ssh git@원격저장소의 url
보안을 위해서 쉘기능을 제한
sudo vim /etc/passwd
아래의 내용을 찾는다.
git:x:1000:1000::/home/git:/bin/sh
아래와 같은 내용으로 변경한다.
git:x:1000:1000::/home/git:/usr/bin/git-shell
이제 ssh를 이용해서 접속을 시도하면 서버가 아래와 같은 메시지를 출력하면서 거부한다.
$ ssh git@gitserver
fatal: What do you think I am? A shell?
Connection to gitserver closed.