SSH 를 사용해서 git 에 연결시 권한 에러가 발생하면 이 방법을 사용해서 원인을 찾고 해결할 수 있습니다.


git pull 이나 push 를 할 때 SSH key 를 잘못 설정했으면 다음과 같은 permission denied 에러가 발생합니다.

git@github.com: Permission denied (publickey).
CODE

이럴 때 ssh 의 동작을 자세히 관찰할 수 있는 verbose mode 로 동작시키면 디버깅에 유용하지만 git 이 ssh 를 바로 호출하므로 verbose mode 옵션을 줄수가 없습니다.

git 2.3 이상부터는 GIT_SSH_COMMAND 환경 변수에 ssh 명령어를 설정할 수 있는데 verbose mode 가 필요하면 이 변수를 활용하면 됩니다.

변수 설정

Linux/OSX

export 명령어로 환경 변수를 설정합니다.

ssh 의 verbose mode 는 -v, -vv, -vvv 세가지이며 v 가 많을수록 더 자세한 정보를 출력합니다.

export GIT_SSH_COMMAND="ssh -v"
BASH

이제 git pull 이나 git push 같이 리모트 저장소에 연결하는 명령어를 실행하면 현재 ssh 설정을 디버깅할 수 있습니다.

사용이 끝났으면 unset 으로 변수를 해제합니다.

unset GIT_SSH_COMMAND
BASH


일시적으로 설정하려면 export 대신 변수를 지정하고 git 명령을 실행하면 됩니다.

GIT_SSH_COMMAND="ssh -v" git pull
BASH

Windows

Powershell 에서 GIT_SSH_COMMAND 변수를 설정합니다.

$env:GIT_SSH_COMMAND="ssh -v"
BASH


이제 git pull 이나 push 명령을 실행합니다.

git pull origin main
git push  origin main
BASH


변수를 해제하려면 다음 명령을 실행합니다.

Remove-item env:GIT_SSH_COMMAND
BASH

.ssh/config에 설정

SSH 의 설정 파일에 다음과 같이 LogLevel 변수를 넣어도 verbose mode 로 동작합니다.

Host github.com
    LogLevel Debug3
    PreferredAuthentications publickey
CODE

같이 보기

Ref