프로그래머로부터 배우는 코딩의 기술

협업환경의 구축 (server)

중앙의 서버에 리모트 브랜치를 만들고 이를 통해서 협업하는 방법을 알아본다.
토픽 프로그래머로부터 배우는 코딩의 기술 > git

준비

이번 수업은 리눅스에 대한 약간의 지식을 요구 하지만 풍부한 경험은 필수 조건이 아니다.
리눅스에 대한 지식은 생활코딩의 리눅스 수업을 통해서 얻을 수 있다.
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.

원격저장소, 원격브랜치를 이용한 협업

http://opentutorials.org/course/303/2290

댓글

댓글 본문
  1. 병철이
    window OS PC를 Server로 구성하고 싶습니다.
    어떻게 해야 할까요..? 궁금합니다.

    위와 같이 따라해 보았으나, 사용자 권한 명령어가 미-적용 되어, 패스하고 아래 내용을 적용 하였으나, ssh 접속시, pw를 물어봅니다..

    클라이언트 pc 에서 souretree를 이용하여 푸시를 하였을 때,

    ;git -c diff.mnemonicprefix=false -c core.quotepath=false push -v --tags --set-upstream origin master:master 실험:실험 실험2:실험2 실험3:실험3
    Pushing to ssh://a2uict2@10.90.67.93:22/gitserver/projects/my_project
    'git-receive-pack'��(��) ���� �Ǵ� �ܺ� ���, ������ �� �ִ� ���α׷�, �Ǵ�
    ��ġ ������ �ƴմϴ�.
    fatal: Could not read from remote repository.
    Please make sure you have the correct access rights
    and the repository exists.
    오류가 나면서 완료됨. ;

    다음과 같이 나옵니다.
  2. 박요한
    git server 에서 ssh://git@192.168.0.103/home/git/repos/test_project.git << 이렇게 push 를 했는데. 이클립스에서요. 원격저장소에 프로젝트가 생성되야 하나요..?? 생성이 안되서요.
  3. greenyant
    SSH key 를 사용하지 않고 비밀번호로 tortoiseSVN을 통해 clone하긴 했는데요. tortoiseSVN은 설치시 같이 깔린 puttygen을 통해 키(확장자 ppk)를 생성하여 사용하네요..
    http://s2junn.tistory.com/62
  4. 엠제이
    사내 서버에 git 리파지토리를 설치하여 협업을 하려던 참에 많은 도움을 받았습니다. 감사~
  5. 별모모
    root권한으로 삭제할 수 있습니다. 하지만, 디렉토리에 접근할 때에는 user로 접근해야 합니다. 소유자:그룹을 git:git 으로 하였으면 삭제할 수는 있지만 컨트롤 권한은 git으로 접근해야 합니다.
    대화보기
    • 별모모
      [ ssh 인증키, password 물어 볼 때 ] ssh키를 발행해서, 서버의 .ssh/authorized_keys에 잘 붙여 넣었는 데도 password를 물어 볼 때 당황하셨죠? ssh서버는 보안을 위해 authorized_keys파일과 부모 디렉토리의 퍼미션을 "규정"하고 있으며, 그 규정에 맞지 않으면 동작하지 않습니다.

      su " 주석/ root로 변경
      " root 패스워드
      cd ~
      cd .ssh
      chmod 600 authorized_keys
      cd ~
      chmod 700 .ssh
    • 별모모
      [ git server, 질문입니다.. ] 리눅스 서버에서 add user한 다음 권한을 root에서 git으로 줄 때, git:git 하면 git이 사용하는 디렉토리를 root로도 지우거나 삭제할 수 없나요?

      ==> root권한으로 삭제할 수 있습니다. 하지만, 디렉토리에 접근할 때에는 user로 접근해야 합니다. 소유자:그룹을 git:git 으로 하였으면 삭제할 수는 있지만 컨트롤 권한은 git으로 접근해야 합니다.
    • koyulka
      강의 잘 봤습니다~
      생성한 원격저장소를 tortoiseGit에 추가해보려고 했는데요. 안되네요. 어떻게 추가를 해야 하나요?
    • Rags
      구글링을 해보니까 Gitorious도 Github 처럼 Git 저장소를 제공하는 서비스네요. Github에 이어서 두번째로 많이 쓰인다네요. Gitosis는 Git을 개별 서버에 설치 시 함께 설치해서 Git을 보다 편리하게(? 보안기능 강화 등등...) 사용 할 수 있게 돕는 툴이라는데요... 지금은 Gitosis 대신 Gitolite을 더 많이 사용한다는거 같아요. 물론 더 자세히 아시려면 구글링 방법 밖에는... ^^;
      대화보기
      • Rags
        Gitorious와 Gitosis는 또 뭔가요? 이것들도 Git 서버 제공 서비스들인가...
        대화보기
        • Rags
          강의 잘 봤습니다. 조만간 git 개발 환경을 구축해야 될 것 같았는데 많은 도움이 될 것 같습니다. 이제 직접 구축해보는 일만 남았군요. ^^질문을 추가하자면... 강의에서는 원격지에서 접속시 console 환경에서 작업을 하고있는데 물론 tortoiseGit을 대신 사용 할 수 있는 거겠죠? ^^
        • fofwisdom
          Gitorious와 Github, Gitosis의 차이를 정확히 모르겠어요!
        • YoungJin Shon
          팀내 문서 관리를 하려고 github 결제해야 하는가 싶었는데소중한 강의!!!음.. 리눅스를 또 공부해야 하군요.여튼 감사드려요 ㅠㅠ