-
참고 문서
-
SSH(Secure Shell)
- 네트워크를 통해 원격 시스템에 접속하여 명령어를 실행하거나 파일을 전송하는 데 사용되는 프로토콜
- 말 그대로 명령을 커널(Kernel)에 전달하고 그 결과를 반환하는 인터페이스인 Shell을 사용한다.
- 서버와 클라이언트 사이에 TCP 보안 채널이 형성되며 기본 포트는 22번을 사용한다.
- Diffie-Hellman 방식으로 대칭키를 교환한다.
-
GitHub SSH 동작 프로세스
- 클라이언트(개발자 컴퓨터)에서 비밀키, 공개키 생성
- 클라이언트에 비밀키 저장
- 서버(Github)에 공개키 등록
- SSH URL로 git 명령 수행
- GitHub은 클라이언트에게 난수를 전달한 후, 이를 서명하여 되돌려줄 것을 요청
- 클라이언트는 난수에 서명(난수 -> 해시 -> 비밀키 암호화)을 적용해 클라이언트에 전달
- GitHub은 공개키를 가지고 서명을 복호화하여 해시를 추출하고, 난수에 해시를 적용한 결과와 비교
-
유의 사항
- SSH키는 Repository가 아닌 계정 단위로 생성하는 것이 일반적이다.
- SSH 에이전트를 사용해 서명을 진행하도록 한다.
- SSH 에이전트 -> 개인 키를 메모리에 안전하게 보관하고 관리하는 프로그램
- 에이전트 프로세스가 실행되는 동안 개인키를 로드하므로 재부팅 혹은 터미널 종료 이후 재실행이 필요하다.
-
사용법
- 키 생성
- ssh-keygen -t ed25519 -C "[email protected]" -f ~/.ssh/id_github_practice
- t -> 키 생성 알고리즘
- C -> 키 식별 정보
- f -> 파일 경로
- 키 생성 경로 -> ~/.ssh/id_github_practice
- SSH 에이전트 실행
- eval "$(ssh-agent -s)"
- 괄호 안 명령어(…)의 출력 결과를 현재 셸에서 실행
- SSH 에이전트에 키 등록
- ssh-add ~/.ssh/id_github_practice
- 공개키 출력값 복사
- cat ~/.ssh/id_github_practice.pub
- 공개키 등록
- GitHub Profile -> settings -> SSH and GPG keys → New SSH key
- 공개키 붙여넣기
- 레포지터리의 ssh 주소 등록 후 연결 테스트
- git init (깃 이니셜라이징)
- git remote add origin [email protected]:username/repo.git (오리진 등록)
- git pull origin main (pull 시도)