GitHub のプライベートリポジトリの制限が緩和され、コードを置く場所として非常に使い勝手が良くなったので、一部のコードを上げるべく準備をしたのですが。。。
ドハマリました^^;
結論
結論を先に言うと環境変数 GIT_SSH に「plink.exe」の入った環境では、接続は「plink.exe」が使用されるので、「ssh」の config 等は意味がありません。以下の 2 点のいずれかを選択してください。
参考サイト:Git for Windowsでplink(putty)を使う
puttyに接続先のホスト情報を登録する
(私はこちらを選択しました)
putty.exeから接続先を設定しておく。例えば接続先 github.com、ログイン名git、あと秘密鍵を入力し、github というセッション名で保存しておくと以下のように接続先を指定できる。
$ git clone github:te2ji/test.git
pageantに鍵を登録する
pageantを起動して秘密鍵を追加しておくと以下のようにして接続先を指定できる。
$ git clone git@github.com:te2ji/test.git
切り分けまでの手順
「git」「ssh」あたりは、適当に使っていたため、切り分けに時間がかかってしまいました。参考サイトと切り分けに必要なログを吐き出す方法をメモしておきます。
GitHub への接続
まず参照すべきは公式です。
Connecting to GitHub with SSH
本来であれば、このとおり進めればよいはずですが^^;
$ ssh -T git@github.com
までつつがなく進められます。
で、実際、git clone
等を実行しようとすると
ERROR: Repository not found.
fatal: Could not read from remote repository.
正直、意味が分からなかったのですが、切り分けのためのデバッグ方法を模索します。
Git のデバッグ
デバッグ
Gitが何をしているか、 本当に 知りたいですか? Gitには、組み込みのトレースのほぼ完全なセットが備わっており、ユーザがする必要があるのは、それらをオンにすることだけです。 これらの環境変数に設定可能な値は次の通りです。
…
GIT_TRACE は、どの特定のカテゴリにも当てはまらない、一般的なトレースを制御します。 これには、エイリアスの展開や、他のサブプログラムへの処理の引き渡しなどが含まれます。
つまり環境変数を設定することで、アクセス詳細が確認できるようになると。
set GIT_TRACE=true
$ git clone git@github.com:te2ji/test.git
するとログにおかしなモノが。。。
09:08:34.502035 run-command.c:640 trace: run_command: unset GIT_DIR; 'C:\Program Files\putty\plink.exe' github 'git-upload-pack '\''te2ji/test.git'\'''
ここで初めてssh
ではなくplink
使ってんじゃん。。。ってなるわけです。
参考までに、linux 上で該当箇所はこんな感じ。
trace: run_command: 'ssh' 'git@github.com' 'git-upload-pack '\''te2ji/test.git'\'''
で、試しに接続してみると Time Out
$ plink git@github.com
FATAL ERROR: Network error: Network error: Connection timed out
問題箇所が特定できました。
で、plink
使用した「GitHub」接続方法を検討したところ、結論で紹介したサイトに辿り着きます。
設定を入れた後に接続してみます。
$ plink github
Using username "git".
Access granted. Press Return to begin session.
Server refused to allocate pty
Hi te2ji! You've successfully authenticated, but GitHub does not provide shell access.
お疲れ様でしたw
余談1
PuTTY を使い慣れていないと、鍵の登録で問題を発生させる可能性があります。
PuTTY で使用する秘密鍵は putty 形式なので、GItHub 公式の手順で作成した OpenSSH 形式の鍵を変換する必要があります。
ざっくり説明すると以下のような手順です。
・PuTTYgen
で OpenSSH 形式の鍵を load
・save private key で putty 形式の保存
・PuTTY で使用する鍵に putty 形式で保存したものを指定
ハマらないようにね。
余談2
原因は、環境変数 GIT_SSH がplink
を指していることなのですが、変更の経緯は追えていません。
もしかすると変更は「PuTTY」が導入されたタイミングではなく、別のタイミングで GIT_SSH は変更されたのかも。
ご存知の方がいれば指摘してください。
余談3
plink
の接続が Time Out なのに
ERROR: Repository not found.
って、おかしくない?って思ったけど、今回はコレ以上追いかけない^^;