fedora 에서 bitbucket 에 public key 방식으로 연결 실패

증상

분명히 windows 에서는 잘 사용하던 key 였는데 fedora 에서 bitbucket.org 에 연결하려고 하니 다음과 같은 에러가 발생했습니다.

$ git clone git@bitbucket.my-repos/my-project.git

Cloning into 'my-project'...
git@bitbucket.org: Permission denied (publickey).
fatal: Could not read from remote repository.

Please make sure you have the correct access rights
and the repository exists.


저 에러는 공개키 쌍이 안 맞을 때 나은 것이기 때문에 ~/.ssh/config 내용을 확인했지만 이상이 없었습니다.

Host bitbucket.org
    HostName bitbucket.org
    User git
    PreferredAuthentications publickey
    IdentityFile ~/.ssh/id_rsa


디버깅

이럴 때는 디버깅을 위해서 ssh client 로 바로 연결해서 자세한 에러 메시지를 보면 됩니다.

다음 명령어로 Bitbucket 에 ssh 로 연결할 수 있습니다. (github, gitlab 도 동일한 방식으로 연결해 보면 됩니다.)

$ ssh  -T git@bitbucket.org

git@bitbucket.org: Permission denied (publickey).


이제 자세한 로그를 보기 위해서 verbose 모드로 ssh 를 실행합니다. verbose 모드는 -v 이며 v 가 여러 개일수록 로그 내용이 자세해 지며 최대 옵션은 -vvv 입니다.

$ ssh -v -T git@bitbucket.org

ebug1: Host 'bitbucket.org' is known and matches the RSA host key.
debug1: Found key in /home/lesstif/.ssh/known_hosts:9
debug1: rekey out after 134217728 blocks
debug1: SSH2_MSG_NEWKEYS sent
debug1: expecting SSH2_MSG_NEWKEYS
debug1: SSH2_MSG_NEWKEYS received
debug1: rekey in after 134217728 blocks
debug1: Will attempt key: /home/lesstif/.ssh/id_rsa RSA SHA256:R/uZtOlrfxd/E0iluzfR69AfP5EsSQjvM4W+9wqvWLo explicit agent
debug1: SSH2_MSG_SERVICE_ACCEPT received
debug1: Authentications that can continue: publickey
debug1: Next authentication method: publickey
debug1: Offering public key: /home/lesstif/.ssh/id_rsa RSA SHA256:R/uZtOlrfxd/E0iluzfR69AfP5EsSQjvM4W+9wqvWLo explicit agent
debug1: send_pubkey_test: no mutual signature algorithm
debug1: No more authentication methods to try.
git@bitbucket.org: Permission denied (publickey).

로그중 "Will attempt key" 항목을 보면 .ssh/config 에 설정한 공개 키쌍을 사용하는 것을 알수 있습니다. 

로그 아래 부분의 다음 메시지가 원인을 유추할 수 있게 해줍니다.

debug1: send_pubkey_test: no mutual signature algorithm


원인

fedora 33 은 SHA1 지원을 뺐는데 bitbucket.org 는 SHA1 을 사용해서 서명 알고리즘이 안 맞아서 발생한 일이었습니다.

workaround 로 .ssh/config 에 Host 설정에 PubkeyAcceptedKeyTypes  항목을 추가해 주면 됩니다.

Host bitbucket.org
	HostName bitbucket.org
	User git
	PubkeyAcceptedKeyTypes ssh-rsa    
	PreferredAuthentications publickey
	IdentityFile ~/.ssh/id_rsa


Ref