github를 사용하려면 ssh키를 등록해야합니다. git과 github를 처음 사용하면 ssh키를 어떻게 만들어야 하는지 어디서 만들어야 하는지 잘 모를 수 있습니다. 저 역시도 그랬구요.
github를 이용하여 소스관리를 하려고 했는데, 검색으로 github에 소스를 등록하고 서버에서 github에 있는 소스를 가져오려고 하는데 검색한 자료대로 했는데 소스는 가져오기가 안되고, 내가 멀 잘못했나 하고 한참을 고민을 한 적이 있습니다.
그러다가 git clone을 할때 나오는 메시지를 보고 다시 검색해보니 github에서 이제는 ssh를 통해서만 clone이 된다고
하여 또 다시 구글 검색을 통해서 ssh키 발급과 github에 ssh키를 등록하는 방법을 알게 되었습니다.
github를 사용할 때 ssh키는 왜 필요한가?
단독으로 사무실내에 git을 단독으로 사용한다면 ssh가 없어도 사용하는데 문제 없습니다. 하지만 외부 git서버에 코드를 clone하거나 push하려면 ssh 프로토코를 사용하는 것이 안전합니다.
또한 github처럼 인터넷으로 git저장소를 호스팅하는 경우에 ssh프로토콜을 지원하고 있습니다.
요즘 대부분의 인터넷 서비스는 ssh를 지원하고 사용하고 있습니다.
github를 사용하려고 하는데 ssh를 언급하게 되니 이해가 되지 않을 수 있습니다. ssh는 git 뿐만 아니라 요즘 대부분의 인터넷 서비스에서 사용하고 있습니다.
안전하게 원격과 통신을 한다는 점이 중요합니다. ssh는 사용자, 패스워드 등 여러가지 인증 방법이 있는데, 그중에서도 편리성이나 안정성 측면에서 제일 많이 사용하는 방식이 공개키 인증 방식입니다.
공개키 인증방식을 사용하려면 공개키와 개인키를 한쌍으로 만들어야 합니다. 공개키는 말그대로 공개하여도 아무 문제없는 키입니다.
공개키는 접속하려는 서버에 등록하고 개인키는 로컬에 저장하고 절대로 공개되어서는 안되는 키입니다.
공개키를 서버에 등록해놓고, 사용자는 개인키를 통해서 ssh에 접속하면 서버는 개인키를 정보와 매치가 되는 공개키가 있는지 확인 후 있으면 접속에 성공, 없으면 접속에 실패합니다.
공개키는 공개되어도 문제가 없습니다. 개인키는 비밀번호와 같다고 생각하여야 하며 반드시 사용자 본인만 접근 할 수 있어야 합니다. 안전하게 보곤하여야 합니다.
ssh 공개키와 개인키 만들기
ssh키를 만들어 보도록 하겠습니다. 윈도우나 mac에서도 만들 수 있겠지만 저는 web 서버에서 git clone을 사용할 예정이라 리눅스에서 만드는 것을 해보도록 하겠습니다.
만들기전에 기존에 ssh키가 만들어져 있는지 확인해봐야 합니다. 확인하지 않고 만들다 보면 기존에 만들어진 키에 덮어 씌워질 수 있습니다.
$ cd !/.ssh
$ls
먼저 ~/.ssh로 이동하여 ls를 실행해보면 id_ed25519 id_ed25519.pub 파일 쌍이 있는지 확인해봅니다. 이 파일이 있다면 이미 키를 생성했던 적이 있는 것입니다. 다른 이름으로 여러개의 키를 만들어도 되지만 개인키의 위치를 따로 지정해줘야해서 불편합니다.
이 파일이 없다면 ssh-keygen을 생성합니다. 생성방법은 의외로 간단합나다. 다음과 같이 명령어를 실행해주면 됩니다.
$ ssh-keygen -t ed25519 -C "your_email@example.com"
-C 옵션의 your_email@emaple.com은 자신의 이메일로 변경하시면 됩니다. ed25519방식으로 생성이 되지 않으면 RSA 옵션을 변경해 ssh키를 생성하면 됩니다.
$ ssh-keygen -t rsa -b 4096 -C "your_email@example.com"
실제로 만들어 보도록 하겠습니다.
$ ssh-keygen -t ed25519 -c "battle@daum.net"
실행하면
저장할 위치를 물어봅니다. 다른 위치를 지정해도 되지만 기본 저장 위치를 사용하면 됩니다.
다음으로 비밀번호를 추가로 지정할 것인지 물어봅니다. 비밀번호를 설정해도 되고, 안해도 되지만 github에서는 공식적으로 비밀번호 설정을 권장하고 있습니다. 따라서 비밀번호를 지정하면 됩니다.
이제 ssh키가 생성되었습니다. 설명을 읽어보면 개인키는 ./ssh/id_ed25519에, 공개키는 id_ed25519.pub에 저장 되었습니다.
RSA 방식으로 생성하는 경우 id_rsa, id_rsa.pub에 저장됩니다.
생성이 잘되었는지 cat 명령어로 확인한번 해보시면 됩니다. 단 개인키는 절대 공개해서는 안됩니다.
이제 이 공개키를 github에 등록해보도록 하겠습니다.
$ cat id_25519.9ub
ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIOg6cFpnLH0iNyBQDGc9OfbxDPovBM9gdlFbT8f0gZP5 your_email@example.com
이 내용 전체를 직접 복하사 하거나, 윈도우에서는 clip 명령어를 사용해 클립보드에 복사합나다. cat으로 실행한 내용을 직접 복사하기보다는 텍스트가 깨지지 않도록 명령어를 통해 복사하는 것을 추천합니다.
ubuntu에서는 xclip을 사용해야 합니다.
없다면 다음 명령어로 설치를 합니다.
$ sudo apt-get install -y xclip
# windows
$ xclip -sel clip < id_ed25519.pub
이제 github 계정에 ssh키를 등록하면 됩니다.
github 계정이 있다면 로그인 후 상단의 프로필을 클릭 후, Settings 메뉴로 이동, SSH and GPG keys 메뉴를 선택합니다. 오른쪽 상단의 new ssh key를 클릭하면 ssh 키 등록창이 나타납니다.
아래 링크로 바로 이동이 가능합니다.
title 필드는 사용자가 구분하기 쉬운 이름을 넣으시면 됩니다.
key 필드에 복사한 공개키를 그대로 붙여넣기 하면 됩니다. 줄바꿈이나 다른 문자가 들어가면 제대로 작동하지 않을 수 있으니 주의하시기 바랍니다.
공개키는 말그대로 공개키입니다. 공개키가 공개된다고 보안상 위험은 없습니다.
ssh 접속 설정
.ssh/config 파일에 아래 내용을 추가합니다. 파일이 없다면 생성 한 후에 추가하면 됩니다.
이제 접속 테스를 해보겠습니다. 아래 명령어로 github에 접속 테스트를 해보겠습니다.
ssh키에 비밀번호를 지정한 경우 비밀번호를 입력받습니다. 인증에 성공하면 github 아이디까지 출력이 됩니다.
이를 통해 ssh키로 접속에 성공한 것을 알 수 있습니다.
이제 github에 ssh키를 통해 접속할 수 있게 되었습니다.
ssh 프로토콜로 git 저장소 clone
github에 ssh 키 셋업이 되었다면, ssh 프로토콜을 통한 저장소 클론이 바로 가능합니다.
$ git clone git@github.com:mirisu/iothook.git
위와 같이 git 클론을 하면 github에 있는 저장소에서 복사를 해서 서버에 소스를 복사하게 됩니다.