본문 바로가기

일::개발

ubuntu: github 에서 반응이 없을 때

새로 설치한 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 '^]'.

 

이어서...