SSH를 통해 Git 연결을 테스트하는 정말 장황한 방법?


109

GIT를 사용할 때 SSH를 통한 GIT 사용에 문제가 있으며 직장과 다른 모뎀으로 가정에서 잘 작동하기 때문에 분명히 내 가정 모뎀이 작동합니다. HTTP를 통한 연결에 문제가 없습니다.

따라서 SSH 문제라고 가정하지만 직접 사용하는 전문가는 없습니다. "테스트"연결을 설정하고 문제가 발생하는 시점과 위치를 정확하게 알려주는 명령이 있습니까?

거의 모든 (예 : "더 큰"명령 fetch, clone또는 push많은 데이터 포함)에서 git(실행 경우에도 -v) 단지 그들이 중지 이유에 아무 표시와 함께 원격으로 연결하는 중간에 "정지", 그래서 그들은 아무 소용이 있습니다 .

SSH 연결에서 발생하는 상황에 대한 자세한 정보를 얻을 수있는 방법이 있습니까?

답변:


113

환경 변수

Git 버전 2.3.0부터 환경 변수를 사용하고 다음과 같이 verbose 인수를 GIT_SSH_COMMAND전달할 수 있습니다 -v.

GIT_SSH_COMMAND="ssh -v" git clone example

더 자세한 정보를 얻으려면 다음을 수행하십시오 -vvv.

GIT_SSH_COMMAND="ssh -vvv" git clone example

힘내 설정

Ubuntu 17.04의 리포지토리에있는 Git 버전 2.10.0에서이 구성을 전체적으로 또는 리포별로 저장할 수 있습니다.

git config core.sshCommand "ssh -vvv"
git pull

적어도 나를 위해, 이렇게하면 : GIT_SSH_COMMAND="ssh -v" git clone exampleSSH 버전을 디버깅 할 수 있습니다 . Cloning into메시지 뒤에 인쇄 되지만 실패 git clone합니다. 제거 GIT_SSH_COMMAND하면 작동합니다. 결국 목적을 달성했습니다.
Paulo Oliveira

5
한 번만 더 나아질 것입니다.git -c core.sshCommand="ssh -vvv" pull
Joseph K. Strauss

git config --global core.sshCommand "ssh -vvv" git clone example
Azodium

81

나는 비슷한 문제가 있었다. 디버깅을 위해 ssh_config에 줄을 추가했습니다. 내가 한 방법은 다음과 같습니다.

git remote -v

거기에 다음과 같은 줄이 있습니다.

origin  git@github.com:me/test.git (fetch)
origin  git@github.com:me/test.git (push)

이 경우 호스트는 github.com입니다. 이제 ssh 설정에서 Host-Entry를 추가 할 수 있습니다 :

vim ~/.ssh/config

그리고 추가하십시오 :

Host github.com
    LogLevel DEBUG3

git 연산을 사용하면 많은 디버그 메시지가 나타납니다. 디버그 메시지를 줄이려면DEBUG1

들어 GIT 버전> = 2.3.0은 투시 @Flimm에서 대답 똑똑한 솔루션을.


14

을 통해 읽기 man git, 거기에 설정할 수있는 몇 가지 유용한 환경 변수는, GIT_TRACE_PACKET하고 GIT_TRACE. 예를 들면 다음과 같습니다.

GIT_TRACE_PACKET=true git clone ssh://[...]

게임에 약간 늦었지만 희망적으로 이것은 누군가를 돕는다!


1
이것은 도움이되지만 SSH 연결 문제에 대한 메시지는 표시되지 않습니다. 그러나 SSH 연결이 작동하면 추가 디버깅 방법입니다.
Trendfischer

5

man ssh:

 -v      Verbose mode.  Causes ssh to print debugging messages about its progress.  This
         is helpful in debugging connection, authentication, and configuration problems.
         Multiple -v options increase the verbosity.  The maximum is 3.

따라서 시도하십시오 ssh -v. 그것이 당신이 알아야 할 것을 알려주지 않는다면, v더 자세한 디버깅 정보를 위해 하나 또는 두 개의을 추가 할 수 있습니다 . 특히 Github의 경우을 시도하십시오 ssh -vvvT git@github.com.

일반적으로 내 경험상 클라이언트가 선택한 인증 방법을 완료 할 수없는 경우 설치 중에 SSH 세션이 중단됩니다. 개인 키가 올바른 권한으로 올바른 위치에 있고 Github에 제공 한 공개 키와 일치하는지 확인하십시오.


답변 주셔서 감사하지만 GitHub이 직접 SSH 연결을 허용하지 않기 때문에 질문을 다르게 요청했을 것입니다. 게시물과 제목을 수정했지만이 내용을 버리고 대신 새 질문을 작성하는 것이 더 낫습니까?
IQAndreas

@IQAndreas, GitHub는 인증 단계가 수행되고 SSH 단계에서 실제로 문제가 발생하면 SSH 연결을 허용합니다. 당신이 그것을 멀리 얻을 수 없다는 것을 발견하면, 연결이 만들어지지 못하게하는 무언가가 진행 중입니다.
tgies

1
가끔 잘 인증 및되고있어 push/ pull아무 문제없이 함께 REPO에. 그러나 종종 단지 명령의 중간에 "중지"와 (나는 그런 큰 같은 대용량의 데이터를 전송 특히 계속되지 않습니다 clone또는 push). 오류 메시지가 없습니다. 오류 메시지가 그대로 있고 계속되지 않습니다.
IQAndreas

3

git (1)에게 ssh (1)에 사용할 외부 명령을 알려주는 방법을 찾지 못했지만 해결 방법으로 / path / to / ssh의 이름을 /path/to/ssh.orig로 바꾸고 쉘을 만듭니다. 스크립트 랩퍼 / path / to / ssh를 추가하고 -v 플래그를 추가하십시오.

$ sudo mv /usr/bin/ssh /usr/bin/ssh.orig
$ sudo vim /usr/bin/ssh
$ cat /usr/bin/ssh
#!/bin/sh

if [ -x /usr/bin/ssh.orig ]; then
    exec /usr/bin/ssh.orig -v -v -v "${@}"
fi

$ sudo chmod a+x /usr/bin/ssh

ssh 전송을 통해 작동하는 git 명령을 실행할 때 자세한 출력을 얻습니다. 디버깅이 완료되면 스크립트를 삭제하고 /path/to/ssh.orig를 / path / to / ssh로 복원하십시오.


4
파일을 이동하는 대신 /usr/bin래퍼 스크립트를 넣는 것을 고려하십시오 /usr/local/bin.
muru

2
적어도 이상한 Windows 설치에서 환경 변수 GIT_SSH는 Git에서 사용할 바이너리를 가리 키도록 설정할 수 있습니다.
Coderer

언급했듯이 원래 ssh 파일을 수정하고 싶지는 않지만 / usr / local /에 해결 방법이 예약되어 있습니다. 투명하지 않으며 쉽게 스톰 핑됩니다. 더 나은 : 대안 스크립트를 $ HOME / bin에 넣고 다른 PATH 세그먼트보다 사용자의 $ PATH 변수에 새로운 bin dir을 추가하십시오. 그리고 그렇게하기 전에 더 나은 ENV var 솔루션이 없는지 확인합니다 (이 답변은 오래되었습니다).
Scott Prive
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.