사이트에 접속을 할 때 '자동로그인'의 기능이 있다. 깃허브를 사용할 때도 이와 비슷한 기능이 있는데, SSH가 그것이다.
SSH는 Secure Shell의 준말로, 비밀 키(Private Key)와 공개 키(Public Key) 한 쌍을 이용해 컴퓨터를 인증하는 보안이 강화된 안전한 방법으로 정보를 교환하는 방식이다. 비밀 키는 말 그대로 외부에 공개되지 않는 키이며, 공개 키는 외부로 공개되는 키이다.
사용자의 컴퓨터에서 SSH 키를 생성하면 두 키를 만들 수 있는데, 이를 깃허브에 등록해 지금 사용하고 있는 기기를 인증할 수 있다. 노트북이라면 노트북을, 서버라면 서버 자체를 등록할 수 있다. 등록이 되면 일일히 로그인을 하지 않고도 곧바로 깃허브 레포지토리 등에 접근해 사용이 가능하다.
사용자 컴퓨터의 퍼블릭 키를 깃허브 서버에 저장하면, 그 뒤로 원격 저장소에 접근할 때마다 사용자 컴퓨터의 비밀 키와 깃허브 서버의 퍼블릭 키를 비교한다. 두 키가 서로 부합한다면 컴퓨터와 서버가 연결된다.
[1] 터미널을 열어 홈 디렉토리로 간다.
$ cd
[2] SSH 키를 생성하는 명령 ssh-keygen
을 입력한다. 이어서 무언가를 입력하라는 내용이 나오는데, 아무것도 입력하지 않고 세 번 Enter
를 쳐 넘어간다.
$ ssh-keygen
[3] SSH 키를 생성하는 명령을 수행하면 숨긴 폴더인 .ssh
디렉토리가 생성되고 이 안에 공개 키와 비밀 키가 생성된다.
$ cd ~/.ssh
$ ls -la
공개 키는 id_rsa.pub
이고, 비밀 키는 id_rsa
이다.
[4] SSH 공개 키를 깃허브 서버에 등록하기 위해 공개 키를 열어 ssh-rsa
로 시작하는 키 내용을 복사한다. 매우 긴 것이 정상이다. 본 예시에서는 공개 키 일부를 지웠다.
$ cd ~/.ssh
$ cat id_rsa.pub
[5] 웹브라우저에서 깃허브에 로그인을 한 뒤, [사용자 아이콘]-[Settings]를 클릭해 들어간다. 좌측 메뉴 중 [SSH and GPG keys]를 클릭 한 뒤, [New SSH Key]를 클릭해 새 키를 등록하도록 한다.
[6] 퍼블릭 키는 여러 개를 등록할 수 있으므로 이름이 필요하다. 적당한 이름을 [Title]에 입력한 뒤 [Key]에 방금 복사한 공개 키를 붙여넣고 [Add SSH Key]를 눌러 등록을 완료한다. 이 때 키의 앞뒤로 불필요한 공백이나 엔터 키가 없도록 주의한다.
SSH 주소로 원격 저장소를 연결하는 데는 두 가지 방식을 쓸 수 있다. 첫 번째로는 새 레포지토리를 만들며 SSH 주소를 복사해 지역 저장소와 원격 저장소를 연결하는 방법이 있고, 두 번째로는 기존 레포지토리의 SSH 주소를 복사해 연결하는 방법이 있다.
[1-1] 새 레포지토리: 이전 포스팅과 같은 방식으로 새 레포지토리를 만든다. 마지막에서 HTTPS 대신 SSH 를 클릭해 주소를 복사한다.
[1-2] 기존 레포지토리: 레포지토리 화면의 우측에서 [Code]를 눌러 [Clone]에서 [SSH] 탭을 선택한 뒤 주소를 복사한다.
[2] 컴퓨터에 새 저장소를 만들거나 기존 저장소에 git init
으로 git 디렉토리로 만든다. 여기서는 새 레포지토리를 만들어보겠다. 기존에 깃과 만들어둔 깃 디렉토리가 있다면 이 단계는 건너뛴다.
$ git init ssh-example
$ cd ssh-example
[3] 원격 저장소에 연결한다. 방법은 HTTPS 주소로 연결하는 방법과 같고 붙여넣는 주소만 다르다.
$ git remote add origin 주소
[4] 잘 연결되었는지 확인한다.
$ git remote -v
깃허브 레포지토리를 지역 저장소에 복사해올 때 사용하는 명령이 git clone
이다. 보통 오픈소스 패키지 등을 내려받을 때 사용한다.
[1] 내려받을 레포지토리로 이동한다. 이번 예시에서는 LiDAR의 데이터를 가공하는 패키지인 tysik의 obstacle_detector 레포지토리를 사용하겠다.
[2] 깃허브에서 레포지토리의 위치로 간 뒤 주소창에서 주소 전체를 복사하거나, [Code]-[Clone]의 HTTPS 주소를 복사한다.
[3] 터미널에서 해당 레포지토리를 복사하길 원하는 위치로 이동한 뒤, git clone
으로 레포지토리를 복사해온다.
$ git clone https://github.com/tysik/obstacle_detector
[4] 레포지토리가 잘 복사되어 왔는지 확인한다. 아래 사진에서는 다른 파일 목록들은 가림 처리했다.
$ ls
$ cd obstacle_detector
$ ls
git clone
으로 복사를 해오면 자동적으로 .git
까지 복사되어 깃허브와 연결된다. 숨긴 파일까지 확인해보면 알 수 있다.
$ ls -la
지금까지는 전부 Public 저장소, 즉 모두에게 공개된 저장소에서 실습을 해왔다. 하지만 경우에 따라 혼자 혹은 협업자들과만 공개가 되는 private 레포지토리를 사용할 수도 있다. 이때는 원격 저장소와 지역 저장소를 연결하는 방식이 조금 다르다.
🔔 협업자(Collaborator) 추가하기
레포지토리의 상단 탭 [Settings]로 들어가면 좌측에 [Collaborators]가 있다. [Add people]을 누르면 깃허브 아이디 혹은 메일 주소를 붙여넣어 협업자를 추가할 수 있다. 협업자는 private 레포지토리라도 커밋, 푸시, 풀을 할 수 있다.
[1] 레포지토리의 [Code]-[Clone]에서 [SSH] 탭을 클릭해 해당 주소를 복사한다. 여기서는 기존에 만들어두었던 test-github
레포지토리를 Private로 변경해 사용하겠다.
🔔 Public/Private 레포지토리 변경하기
레포지토리의 [Settings]-[General]의 하단으로 내려가면 [Danger Zone]에 [Change repository visibility]가 있다. 이곳에서 Private <-> Public 전환이 가능하다
[2] 터미널을 켜 복사해올 곳으로 이동한 후, git clone
명령을 수행한다.
$ git clone SSH주소
만약 HTTPS 주소로 하듯 명령을 쓰면 접근이 거부되었다는 경고가 나타나며 clone이 되지 않는다. 사용자가 해당 레포지토리에 접근할 수 있어야 한다.
fatal: Authentication failed for 'https://github.com/EunGiHan/test-github/'
[3] 복사된 것을 확인한다. git과 연결되어 있음을 확인할 수도 있다. 즉, 원격 레포지토리로 따로 지정하지 않아도 지역 저장소와 연결된 것이다.
$ ls -la