새로 설치한 ubuntu 서버에서 github 에 있는 소스를 pull 하려고 하는 상황이었다.
처음에 https로 clone할 때는 문제 없이 되었다.
> git clone https://github.com/........./project.git
github ID, password를 매번 입력하는게 귀찮기도 하고, 스크립트를 만들어서 pull, build 하려고 https 대신 ssh 를 이용하기로 했다.
1) ssh key 생성
> ssh-keygen -t ed25519 -C "testaccount@test.com"
이렇게 하면 ~/.ssh/ 밑에 id_ed25519, id_ed25519.pub 2개의 파일이 생긴다.
.pub 확장자가 붙은 것은 공개키 파일, 없는 것은 개인키 파일이다.
개인키 파일은 내 암호나 마찬가지이므로 잘 보관해야 한다.
2) 공개 키를 github에 등록
github 웹의 내 ID - Settings - SSH and GPG keys 항목에서 새로운 SSH key를 등록해준다.
New SSH key 누른 후에 적당한 이름을 넣어주고, id_ed25519.pub 파일의 내용을 넣어주면 된다.
이제 github.com 은 내 공개키를 가지고 있기 때문에 내 개인키를 가지고 인증 요청을 하면 ID/ password 없이도 그게 나라는 것을 검증할 수 있다.
3) git remote repository 설정을 바꿔주자.
프로젝트 디렉토리의 .git/config 에는 remote repository 정보가 들어있다.
[core]
repositoryformatversion = 0
filemode = true
bare = false
logallrefupdates = true
[remote "origin"]
url = https://github.com/......../project.git
fetch = +refs/heads/*:refs/remotes/origin/*
[branch "main"]
remote = origin
merge = refs/heads/main
https://github.com/... 부분을 ssh 주소 git@github.com:......../project.git 로 바꿔주고 git에 접근해보자.
엇.
> git pull
반응이 없다.....
4) SSH key가 제대로 사용되고 있나?
다른 사이트에 사용하기 위해 SSH key 를 만들었다면 여러 개의 key 중에 원하지 않는 것이 사용될 수도 있을 것 같다.
~/.ssh/ 디렉토리 안을 보니 id_rsa 도 있네?
github.com 에는 방금 만든 키 id_ed25519 를 사용하도록 설정해보자.
~/.ssh/config 파일을 만들고 설정을 넣어보자.
# github.com 에는 id_ed25519 를 사용함
host github.com
IdentityFile ~/.ssh/id_ed25519
> git pull
Bad owner or permissions on /home/rise/.ssh/config
fatal: Could not read from remote repository.
Please make sure you have the correct access rights and the repository exists.
아... .ssh/config 파일은 소유자 외에 write 권한이 있으면 안된다.
> chmod 744 ~/.ssh/config
> git pull
ㅠㅠ 여전히 반응이 없다.
어디서 문제인지 알아보자.
5) git log 보기
> export GIT_TRACE=1
> git pull
14:51:11.779659 git.c:455 trace: built-in: git pull
14:51:11.779856 run-command.c:668 trace: run_command: git fetch --update-head-ok
14:51:11.780821 git.c:455 trace: built-in: git fetch --update-head-ok
14:51:11.781148 run-command.c:668 trace: run_command: unset GIT_PREFIX; GIT_PROTOCOL=version=2 ssh -o SendEnv=GIT_PROTOCOL git@github.com 'git-upload-pack '\''....../project.git'\'''
어음... 이걸로는 알 수 있는게 많지 않다.
6) ssh log 보기
> export GIT_SSH_COMMAND="ssh -vvv"
> git pull
14:51:00.754443 git.c:455 trace: built-in: git pull
14:51:00.754635 run-command.c:668 trace: run_command: git fetch --update-head-ok
14:51:00.755632 git.c:455 trace: built-in: git fetch --update-head-ok
14:51:00.756024 run-command.c:668 trace: run_command: unset GIT_PREFIX; GIT_PROTOCOL=version=2 'ssh -vvv' -o SendEnv=GIT_PROTOCOL git@github.com 'git-upload-pack '\''....../project.git'\'''
OpenSSH_8.9p1 Ubuntu-3ubuntu0.4, OpenSSL 3.0.2 15 Mar 2022
debug1: Reading configuration data /home/rise/.ssh/config
debug1: /home/rise/.ssh/config line 1: Applying options for github.com
debug1: Reading configuration data /etc/ssh/ssh_config
debug1: /etc/ssh/ssh_config line 19: include /etc/ssh/ssh_config.d/*.conf matched no files
debug1: /etc/ssh/ssh_config line 21: Applying options for *
debug3: expanded UserKnownHostsFile '~/.ssh/known_hosts' -> '/home/rise/.ssh/known_hosts'
debug3: expanded UserKnownHostsFile '~/.ssh/known_hosts2' -> '/home/rise/.ssh/known_hosts2'
debug2: resolving "github.com" port 22
debug3: resolve_host: lookup github.com:22
debug3: ssh_connect_direct: entering
debug1: Connecting to github.com [20.200.245.247] port 22.
debug3: set_sock_tos: set socket 3 IP_TOS 0x10
debug1: Connection established.
debug1: identity file /home/rise/.ssh/id_ed25519 type 3
debug1: identity file /home/rise/.ssh/id_ed25519-cert type -1
debug1: Local version string SSH-2.0-OpenSSH_8.9p1 Ubuntu-3ubuntu0.4
Connection established 이후에 Local version string 에서 멈춰있다.
정상적으로 접속이 이루어지는 경우에
Local version string .... 다음에는 아래와 같이 Remote protocol version 이 나와야 한다.
debug1: Local version string SSH-2.0-OpenSSH_9.0
debug1: Remote protocol version 2.0, remote software version babeld-6706de95
github 에 ssh 접속이 되는 다른 서버에서 github.com 의 22번 포트에 접속하면 아래와 같이 remote version string 이 나오지만
user@server-with-no-problem> telnet github.com 22
Trying 20.200.245.247...
Connected to github.com.
Escape character is '^]'.
SSH-2.0-babeld-6706de95
이 서버에서는 connection은 이루어지지만 remote version string 이 리턴되지 않는다.
user@server-with-problem> telnet github.com 22
Trying 20.200.245.247...
Connected to github.com.
Escape character is '^]'.
이어서...