1. git publickey란 무엇인가?
2. SSH 란 무엇인가?
3. SSH는 암호화된 연결을 위해 공개키 암호화 방식을 사용
4. 공개키 암호화 알고리즘 중 하나인 RSA 방식
5. SSH 연결 인증방식
6. 내 ssh publickey는 어떻게 관리될까?
7. 오류가 발생한 원인
source tree에 github 계정을 연동하려면 ssh키를 새로등록하라고 나오는것 같아 등록했습니다.
그런데 source tree에 remote 브랜치를 만들거나 삭제 할 때 해당 명령을 요청하면 멈춰버려서 터미널에서 명령어를 치니 public key가 안맞는다고 나옵니다. 이번기회에 git 관련한 설정 및 통신방법에대해서 자세히 알아보려고 합니다.
1. git publickey란 무엇인가?
많은 git 서버들은 SSH 공개키로 인증한다.
위 사이트에 접속하면 가장 먼저나오는 문구입니다.
Permission denied (publickey). 뒤에나오는 publickey는 SSH의 공개키를 말하는 것 같습니다.
2. SSH 란 무엇인가?
https://ko.wikipedia.org/wiki/%EC%8B%9C%ED%81%90%EC%96%B4_%EC%85%B8
네트워크 상의 다른 컴퓨터에 로그인하거나 원격 시스템에서 명령을 실행하고 다른 시스템으로 파일을 복사할 수 있도록 해 주는 응용 프로그램 또는 그 프로토콜 을 가리킨다. 기존의 rsh , rlogin, 텔넷 등을 대체하기 위해 설계되었으며, 강력한 인증 방법 및 안전하지 못한 네트워크에서 안전하게 통신을 할 수 있는 기능을 제공한다. 기본적으로는 22번 포트를 사용한다.
생각해보니 서버에 접속할때 ssh 계정@호스트:포트 를 입력해 접속하면 터미널 창에서 서버에 접속이 가능한데 쉽게 보안성이 강화된 외부접속용 터미널 이라고 이해하였습니다.
3. SSH는 암호화된 연결을 위해 공개키 암호화 방식을 사용
공개키 암호화 방식은 대칭키 암호화방식의 보완하기위한 방법으로 나왔습니다. 대칭키는 클라이언트와 서버간 암호화하는 키를 똑같은 것을 사용하는것인데 속도가 빠르다는 장점이 있지만 보안 및 키관리 등 여러가지 문제가 있습니다. 그래서 비대칭키 방식이 나왔습니다. 이것은 생성 시 공개키, 개인키 2개가 만들어집니다.
- 공개키로 데이터를 암호화
- 암호화된 데이터를 똑같은 공개키로 복호화가 불가
- 암호화된 데이터는 개인키로만 복호화 가능
- 그러므로 클라이언트는 개인키를 잘 가지고 있어야함
4. 공개키 암호화 알고리즘 중 하나인 RSA 방식
https://ko.wikipedia.org/wiki/RSA_%EC%95%94%ED%98%B8
공개키에는 RSA라는 단어가 자주 딸려나온것을 들어온 것 같습니다. RSA는 위에 말한 공개키와 개인키를 만들어내는 방법(알고리즘)중 하나입니다. 주로 어떤 서비스에서 시장에서 1위를 하는회사가 대부분의 시장을 점유하듯이 RSA방식이 시장에서 가장 많이 사용하는 방식으로 다른 알고리즘들도 있지만 RSA 암호화 방식을 사용한다고 이해하면 될 것 같습니다.
5. SSH 연결 인증방식
https://www.foxpass.com/blog/learn-ssh-keys-in-minutes/
ssh 연결 인증방식에 대해 간단히 정리해봤습니다.
1. 내가 접속하고자 하는 서버에 연결을 시도 합니다.
2. 연결이 성공하였다면 인증을 위해 서버는 랜덤한 메시지를 클라이언트에게 응답합니다. ex)Hello There
3. 클라이언트는 이 랜덤한 메시지 ex)Hello There를 자신이 가지고 있는 개인키로 암호화 하여 서버에게 전달합니다.
(서버는 클라이언트가 누군지 모르기때문에 아마 공개키도 함께 전달해줘야히지 않을까..?)
4. 서버가 (아마 클라이언트로부터 받은 공개키를 서버가 가지고 있어 이것을 풀어) 복호화하여 매시지가 맞다면 공개키로 세션키를 암호화하여 서버에서 전달
5. 암호화 통신 시작
6. 내 ssh publickey는 어떻게 관리될까?
운영체제마다 ssh키를 관리하는 방식이 다른 것 같습니다. mac의 경우
/Users/내 계정/.ssh 폴더에서 관리되는 것 같습니다.
내 ssh 키는 확인하였으니 github에서는 내 ssh 공개키를 어떻게 관리하고 있을까?
github 사이트에서 ssh키 관련 방법에대해 아주 친절하게 가이드하고있습니다.
https://docs.github.com/en/authentication/connecting-to-github-with-ssh/about-ssh
7. 오류가 발생한 원인
제 github에는 따로 ssh키를 등록하지 않았습니다.
git clone시 ssh키를 사용하는데 이게 clone후에 해당 ssh키를 통해서만 수정이 가능 한 것 같습니다.
source tree를 통해 중간에 ssh키가 바뀌었기때문에 새로 clone을 받으니 해결되었습니다.
아마 다른 저장소들도 모두 영향을 받아 새로 clone을 받아야 할 것 같습니다.
이상으로 ssh 통신방법에대해 이해 할 수 있었습니다.