年明け早々gitにトラブル発生
年明け早々、クリアな頭でプルリクに対するレビュー対応して、再度PUSHしようとすると以下のようなメッセージが・・・
(環境はWSL2のUbuntu)
ssh: Could not resolve hostname github.com: Temporary failure in name resolution
fatal: Could not read from remote repository.
Please make sure you have correct access rights and the repository exists.
勘弁してくれ。
やったこと
5. Windowsのファイアウォールにwsl2からの通信を許可するルールを追加する
6. /etc/resolv.conf にnameserverを記述
※今回の事象、いくつかの問題に切り分けられそうなので以下にリストアップしてみました
SSHキーの問題:1
WSLやWindowsシステムの問題:2
インターネット接続の問題:3,4
DNSの問題:5,6
1.SSHキーが登録されているか確認
まずはエラーメッセージにあった
Please make sure you have correct access rights and the repository exists.
この部分を解決する。
といっても、Githubのマイページから、settings > SSH and GPG keys
に飛んで、keyが登録されているかを確認するだけ。
今回はちゃんと登録されていたのでOK。
2. WSL、PCの再起動
これは皆さんおなじみの解決方法。
とはいえ、エラーが起きてぐるぐるしてる頭では意外と忘れがちなもの。
割と何も考えずに再起動してみると上手くいくことが多い(特にExcel)。
これで上手くいけば、たぶんWSLやWindowsに何かしらの不具合が生じていた可能性が高そう。
3. wi-fiの再起動
インターネット接続に関する問題かどうかを切り分けたいですよね。
これに関してはStackOverFlowで言及がありました。
https://stackoverflow.com/questions/20370294/git-could-not-resolve-host-github-com-error-while-cloning-remote-repository-in
Spent a couple hours trying to fix this.
Re-connecting my wifi did the trick.
wifiを接続し直したら直ることもあるみたいですね。
今回は治らなかったので次に進みます。。。
4. pingが通るか確認
次は、本当にインターネットに接続されているか?を確認する。
まずはWSL上でpingを打ってみる。
$ ping github.com
ping: github.com: Temporary failure in name resolution
ダメっぽい。。。
今度はコマンドプロンプトで通るかやってみる。
お、通るやんけ
今度はgithubのネームサーバのIPアドレス20.27.177.113にWSLからpingを打ってみる。
どうやら通るみたいだ。
なので、インターネットはつながっているが、名前解決だけできてなさそうということがわかる。
5. WindowsのファイアウォールにWSL2からの通信を許可するルールを追加する
この方法はChatGPTとおしゃべりしてる時に教えてもらった方法。
「firewall確認してみたら?」と言ってくれた。
調べたらドストライクなことを書いてくださっている記事を見つけたので、実行。
WSL2でDNSの名前解決ができなくなったときの対処法(Firewallにルールを追加)
上記実行した結果、pingが通りました。。。
pingが通ったので、git pushも問題なく実行できました。
こちらの記事に命を救われました。ありがとうございました。
6. /etc/resolv.conf にnameserverを記述
これは5でも解決しなかった場合の最終手段。
設定ファイルに接続したいDNSサーバーのIPアドレスを記入するだけ。
今回はgithubのIPアドレスを入力。
※sudoしているのはread only で開かないようにするため。他の方法あれば教えてください
$ sudo vi /etc/resolv.conf
# This file was automatically generated by WSL. To stop automatic generation of this file, add the following entry to /etc/wsl.conf:
# [network]
# generateResolvConf = false
nameserver 20.27.177.113
:wq
で上書き保存を忘れずに。
さすがにここまですれば通るはず。
おわりに
今回はgit push しようとして失敗していたが、
リモートリポジトリにアクセスできていないので、git cloneしようとしている人にも刺さる内容かなと思う。
今回のエラーはDNSの問題であることが分かったが、
結局なぜ突然名前解決できなくなってしまったかは不明なままだった。