• 참고 문서

    • SSH 키 생성
      • https://docs.github.com/ko/authentication/connecting-to-github-with-ssh/generating-a-new-ssh-key-and-adding-it-to-the-ssh-agent
  • 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 시도)