[GitHub] (공용 서버 등에서) 로그인 없이 GitHub 사용하기

by 스뎅(thDeng) on
이 내용은 GitHub Enterprise 에서도 가능한 방법이다.

간혹 배포서버 등에서 GitHub에 접속해서 commit을 한다거나 pull 받아와야 하는 경우가 있다. 하지만 배포서버 같은 공용 서버는 말 그대로 공용이기 때문에 특정 사용자로 로그인을 하기 난감한 경우가 있다.

이런 경우 repository에 서버 자체를 인증해 두고, ssh를 통해 로그인을 하지 않고 접근할 수 있는 방법이 있다.

RSA key 생성

공용 서버에서 ssh-keygen 명령을 통해 GitHub에 등록할 RSA 키를 생성한다. 이미 키파일(${HOME}/.ssh/id_rsa, ${HOME}/.ssh/id_rsa.pub)이 존재하는 경우 이 단계를 패스하면 된다. (RSA 이외에 지원되는 암호화 방식은 여기서 체크하자.)

$ ssh-keygen -t rsa
Generating public/private rsa key pair.
Enter file in which to save the key (/my/home/.ssh/id_rsa):
Enter passphrase (empty for no passphrase):
Enter same passphrase again:
Your identification has been saved in /my/home/.ssh/id_rsa.
Your public key has been saved in /my/home/.ssh/id_rsa.pub.
The key fingerprint is:
.. 핑거 프린트 어쩌구 저쩌구 ..
The key's randomart image is:
+---[RSA 2048]----+
.. 어쩌구 저쩌구 ..
+----[SHA256]-----+
$ cat /my/home/.ssh/id_rsa.pub
ssh-rsa ABCD어쩌구저쩌구 me@mememe

처음에 생성할 파일 경로명을 물어보는데, 그냥 엔터를 입력하면 default 경로(${HOME}/.ssh/id_rsa)에 생성된다. 파일 경로를 따로 입력해서 rsa 키 파일을 여러벌 만들어서 사이트 마다 다르게 등록해서 사용할 수도 있다.

키를 사용할 때 마다 입력할 비밀번호를 물어보는데, 그냥 엔터를 입력하면 암호 없이 사용하는 파일이 생성된다.

여기서는 defualt 경로에 암호 없이 생성하는 예제로 진행하겠다.

GitHub에 Deploy Key 등록

GitHub repository에서 Settings > Deploy Keys를 접속하면 현재 등록되어 있는 key들을 볼 수 있다. 오른쪽에 있는 Add deploy key 버튼을 누르면 아래와 같이 key를 등록할 수 있는 화면이 나온다.

Register GitHub Deploy Keys

Title은 구분할 수 있는 이름을 주면 되고, Key에는 위에서 생성한 RSA 키의 public key를 적어주면 된다. 다음 명령으로 확인할 수 있다.

$ cat ~/.ssh/id_rsa.pub
ssh-rsa ABCD어쩌구저쩌구 me@mememe

접속 확인

key를 등록한 뒤 아래 명령으로 정상적으로 접속 되는지 확인하자. GitHub Enterprise에서는 github.com 대신 호스트 이름을 적어주면 된다.

$ ssh -T git@github.com
$ ssh -T git@'{ENTERPRISE_HOST}'

한번도 접속한 적이 없으면 아래처럼 접속해도 될지 물어보는 내용이 나오고, yes라고 타이핑을 하면 접속을 시도한다.

The authenticity of host 'github.com (10.10.10.10)' can't be established.
RSA key fingerprint is 46:어쩌구:저쩌구:저쩔씨구:28.
Are you sure you want to continue connecting (yes/no)?

그러면 아래와 같이 사용자 이름 또는 repository 이름이 응답으로 오면 성공이다.

Hi 'username 또는 repository'! You've successfully authenticated, but GitHub does not
provide shell access.

만일 실패했다면 help 페이지에서 찾아보자.

프로젝트 clone 받기

여기서 실수하기 좋은 내용은, ssh 인증을 사용하는 방법이기 때문에 clone을 받을 때 http 인증이 아닌 ssh 인증으로 받아야 한다는 점이다. (한참 삽질했어 T_T)

잘돼(O): git@github.com:me/my-project.git
안돼(X): https://github.com/me/my-project.git

git 인증 시간 늘리기 꼼수

이건.. 정말 꼼수로.. ssh 인증을 못 쓰는 상황에서 쓰는 방법이 있다. GitHub 이 아닌 GitLab을 설치해서 사용할 때 ssh 인증 기능을 켜두지 않는다거나 할 때 쓸 수 있다.

git 인증 세션 시간을 길게 늘려주고 아무나 로그인을 해둔다. 한번 로그인을 해두면 인증이 만료되기 전까지는 비밀번호 없이 그 인증을 계속 쓸 수 있다. 아래 명령으로 로그인 인증 만료 시간을 늘려준다. timeout 단위는 초이다. (git-credential-cache)

$ git config --global credential.helper 'cache --timeout=3600'

인증 만료 전에 꾸준히 git 명령을 날려주면 세션이 계속 연장(?)되기 때문에, jenkins 등으로 timer를 걸고 사용해 두면 좋다.

하지만, 어디까지나 꼼수는 꼼수일뿐..

참고

별도로 명시하지 않을 경우, 이 블로그의 포스트는 다음 라이선스에 따라 사용할 수 있습니다: Creative Commons License CC Attribution-NonCommercial-ShareAlike 4.0 International License