Git over SSH on Windows

Sangwon Lee
6 min readJan 17, 2022

--

배경

WSL2를 매우 만족해하며 잘 쓰고 있다. 리눅스를 쓰는데 필요에 따라 윈도의 유려한 GUI를 함께 쓸 수 있다는건 정말 좋은 경험이다. 그래서 이 충격적인 경험을 기반으로 주식을 사놨는데 왤케 안오르냐 충격..

WSL2를 많이 쓰면서도 항상 뭔가 찜찜한 느낌이 남아 있었는데, 바로 윈도우 native 환경에서 매끄러운 git 사용이다. 리눅스/맥에 익숙해져서 커맨드라인으로 사용하고 싶은데 이게 잘 안되는거다. cygwin / git-bash 이런걸로는 되는데 뭔가 구려서 쓰고 싶지 않았다. GUI를 쓰더라도 문제가 있었는데 over SSH 설정이 잘 안되더라. 항상 조금 셋업해보다가 걍 접었었다.

예를들어, 만약에 윈도에서 Desktop App이라던지 IntelliJ로 Spring 앱을 띄워서 작업할 일이 생겼다면 어떻게 해야할까? 소스코드가 윈도에 있어야하고 그럼 git (ssh) 연동을 해야하는데 지금까지 경험으로는 잘 안되었기 때문에 그냥 개발 포기? 음.. 더이상 물러설 수 없는 시점이 된 것 같았다. 괴롭고 귀찮은 작업이지만 어쨌든 다행히 이 고비를 넘겼다. 그런데 왠지 다음에 또 까먹을 것 같아서 기록차원에서 남겨본다.

Git over SSH 동작방식

Git CLI 혹은 GUI 툴이 SSH 기반으로 리파지토리와 통신할때는

1. git 오퍼레이션 요청이 오면
2. 따로 지정된 ssh 명령이 없다면 그냥 시스템의 기본 ssh를 이용해서
3. RSA Pub 키에 대칭되는 Private 키로 (기본은 ~/.ssh/id_rsa) 리파지토리 접근을 시도하는데
4. 이때, passphrase (를 등록했다면) 물어보게 된다. (매번)

그런데 이렇게 매번 4번의 passphrase 를 묻는게 괴로우니까 이걸 안묻게 하고 싶은거다. 그 매커니즘처럼 ssh-agent라는 키관리 서비스를 이용하면 이렇게 된다.

1. ssh-add를 이용해 미리 RSA Private 키에 해당하는 passphrase를 입력해두면
2. 이 정보가 ssh-agent에 등록되게 되고
3. git 오퍼레이션으로 ssh를 통한 리파지토리 접근이 필요할때
4. ssh-agent를 이미 등록된 인증된 키 정보를 이용해 접근을 성공한다.

즉, ssh-agent를 이용하면 최초 한번만 passphrase를 입력해 등록해두면 그 뒤로는 편하게 사용할 수 있는 것이다. 그럼 이 핵심인 ssh-agent를 윈도에서는 어떻게 제공하는지 살펴보자.

윈도에서 ssh-agent 이용하기

PuTTY (Pagent 이용하기)

PuTTY는 역사와 전통을 자랑하고 윈도 built-in ssh 등이 나오기 전까지 많은 사랑을 받아왔던 ssh 관련 툴체인이다. 이걸 이용하는 방법이 있다. 실제 써본건 아니라 참고로만 적어둔다.

OpenSSH Authentication Agent 서비스 이용

1. Agent Service 활성화

다행히 윈도가 기본으로 제공하는 agent 서비스가 있는데, 시작 > Services 에서 확인할 수 있다.

만약 이 서비스가 비활성화되어 있다면, Startup Type -> Automatic, Status -> Running 로 활성화해준다.

2. Git for Windows 설치하기

Git 명령을 설치해야하는데 여러가지가 있을 수 있겠지만 Git for Windows가 거의 정답이니까 이걸 설치하도록 하자.

3. Git의 sshCommand 경로 오버라이드

윈도의 기본 ssh.exe 실행파일을 바라보도록 한다. (윈도 제공 ssh.exe를 사용해야 OpenSSH Auh Service에 잘 붙음)

git config --global core.sshCommand "'C:\Windows\System32\OpenSSH\ssh.exe'"

** 이 부분에서 엄청나게 삽질을 했었다. sshCommand의 경로를 설정한 후 git 커맨드를 날렸는데 (실제로 파일이 존재함에도..) 계속 해당 ssh 파일을 못 찾는다고 나오는 것이다. 알고보니 내가 git 커맨드가 존재하길래 그대로 썼었는데 이게 예전에 SourceTree를 설치할때 같이 깔린 git이었고 정작 앱을 지웠음에도 AppData 영역에 남아있었고 심지어 환경변수 PATH에도 들어있었다. 정확한 이유는 모르겠지만 잘못된 git이라고 보고 삭제한 후에 Git for Windows를 설치했더니 잘 되더라.

4. Git over SSH 동작 확인

PS C:\Users\Sangwon\Develops\git-over-ssh> ssh-add.exe
Enter passphrase for C:\Users\Sangwon/.ssh/id_rsa:
Identity added: C:\Users\Sangwon/.ssh/id_rsa (C:\Users\Sangwon/.ssh/id_rsa)
PS C:\Users\Sangwon\Develops\git-over-ssh> ssh-add.exe -l
4096 SHA256:BEXAwGnEAMYpIU/ackPC9Cw8vH+4/5YOQDrg1Fk+fqE C:\Users\Sangwon/.ssh/id_rsa (RSA)
PS C:\Users\Sangwon\Develops\git-over-ssh> git pull
warning: agent returned different signature type ssh-rsa (expected rsa-sha2-512)
Already up to date.

요약

윈도우즈 환경에서 Git over SSH를 셋업하려면

  • Git for Windows를 설치
    (혹시 다른 git이 PATH에 걸려서 먼저 실행되지 않도록 확인)
  • Git config 의core.sshCommand 에 ssh 실행파일 PATH설정

작성일
2021. 3. 19.

--

--