문제

Unix 의 ssh 는 $HOME/.ssh/id_rsa 를 기본적으로 사용하나

Windows용 git 인 msysgit 에 포함된 ssh.exe 는 %USERPROFILE%\.ssh 에서 찾지 않고 git 이 설치된 폴더와 같은 레벨의 .ss h폴더에서 id_rsa 를 찾게 되므로 저 경로에 파일이 없으면 다음과 같은 에러가 발생한다.

c:\ ssh -T git@github.com
 
Permission denied (publickey).
CODE

-i 옵션으로 명시적으로 id_rsa 의 절대 경로를 지정해도 git.exe 가 내부적으로 ssh.exe 를 호출할때 이 옵션을 넘겨줄 방법이 없으므로 git.exe 사용시에는 제대로 동작하지 않는다.

해결

1.git 폴더의 .ssh 에 identity_file 이동

msysgit 이 c:\devel\git 에 설치되었다고 하자. 그러면 다음과 같은 구조를 갖게 된다.

c:\devel\git

    • bin
    • cmd
    • doc
    • ...

bin, cmd 와 같은 레벨로 .ssh 폴더를 만들고 여기에 id_rsa, id_rsa.pub 를 복사해 주면 된다.

  • .ssh
    • id_rsa
    • id_rsa.pub
  • bin
  • cmd
  • doc
  • ...

2.putty 의 ssh 프로그램인 plink와 key 관리 프로그램인 Pageant 사용

GIT_SSH 환경변수를 설정해서 git 이 사용하는 ssh 를 putty 의 plink.exe 로 교체후 Pageant 에 ssh key 를 import 한다.

자세한 절차는 예전 블로그 참조 - http://lesstif.tistory.com/entry/windows%EC%97%90-git-%EC%84%A4%EC%B9%98%ED%96%88%EB%8A%94%EB%8D%B0-ssh-%EA%B0%80-%EB%8F%99%EC%9E%91-%EC%95%88-%ED%95%A0-%EA%B2%BD%EC%9A%B0