SSH経由でGit接続をテストするための本当に冗長な方法ですか?


109

GITを使用する場合、SSHを介したGITの使用に問題があり、仕事でも自宅でも別のモデムを使用しても問題なく動作するため、明らかに動作しているのは自宅のモデムです。HTTP経由の接続に問題はありません。

だから、私はそれがSSHの問題であると仮定していますが、私はそれを直接使用する専門家ではありません。「テスト」接続を設定し、問題が発生するタイミングと場所を正確に知らせるコマンドを実行できますか?

ほとんどすべて(のような「大きな」コマンドfetchcloneまたはpush多くのデータを持つ)からgit(で実行しても-v)ちょうど彼らが停止した理由として表示なしでリモートからの接続の途中で「ハング」ので、彼らは役に立たないです。

SSH接続で何が起きているかについて詳細を知る方法はありますか?

回答:


113

環境変数

Gitバージョン2.3.0以降では、環境変数GIT_SSH_COMMANDを使用して、次の-vように詳細な引数を渡すことができます。

GIT_SSH_COMMAND="ssh -v" git clone example

さらに冗長にするには、次のようにし-vvvます。

GIT_SSH_COMMAND="ssh -vvv" git clone example

Gitの構成

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と動作します。最後に、目的を果たしました。
パウロオリベイラ

5
1回では、これは良くなります:git -c core.sshCommand="ssh -vvv" pull
ジョセフ・K.シュトラウス

git config --global core.sshCommand "ssh -vvv" git clone example
アゾジウム

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 configにホストエントリを追加できます。

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接続が機能する場合、これがさらにデバッグする方法です。
トレンドフィッシャー

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。知っておくべきことがわからない場合は、1つか2を追加vして、さらに詳細なデバッグ情報を得ることができます。特にGithubの場合は、を試してくださいssh -vvvT git@github.com

通常、私の経験では、クライアントが選択した認証方法を完了できない場合、セットアップ中にSSHセッションがハングします。秘密キーが適切な権限を持つ適切な場所にあり、Githubに指定した公開キーと一致することを確認します。


答えてくれてありがとう、しかし私はおそらく違った質問をするべきだったでしょう(GitHubはそのような直接SSH接続を許可していないので)。投稿とタイトルを編集しましたが、これを破棄して代わりに新しい質問を作成する方が良いでしょうか?
IQAndreas

@ IQAndreas、GitHubは、認証フェーズが実行されるという意味で、そのようなSSH接続を許可します。実際にSSHステップで問題が発生している場合は、そのように表示されます。そこまで行けないことに気づいたら、何かが起こっているので、接続が確立されていません。
tgies

1
私はうまく認証されており、時々push/ pullレポで問題なく認証されています。しかし、多くの場合、コマンドの途中で「ハング」し、続行しません(特に、大容量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
ムル14年

2
少なくとも私の奇妙なWindowsインストールでは、環境変数GIT_SSHはGitで使用したいバイナリを指すように設定できます。
コーデラー

前述のように、元のsshファイルを変更することは絶対に避けたいのですが、回避策については/ usr / local /に予約があります。透明ではなく、簡単に踏みつけられます。より良い方法:回避策スクリプトを$ HOME / binに配置し、ユーザーの$ PATH変数に他のPATHセグメントの前にその新しいbin dirを追加します。そして、それを行う前に、さらに良いENV varソリューションがないかどうかを確認します(この答えは古いです)。
スコットプライヴ
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.