GitHubのSSH接続で応答がない
GitHubで公開鍵設定をした後、接続テストをかけました。
しかし、秘密鍵のpassphraseを入力してもGitHub側から応答がありません。
$ ssh -T git@github.com
Enter passphrase for key '/home/xxx/.ssh/id_rsa':
^C
公式のトラブルシューティングを参考にしても、応答しないパターンの解決法はありません。
そんな方向けの解決方法兼忘備録
解決方法
下記方法で通るかテストしてみてください。
$ ssh -o IPQoS=none -T git@github.com
Enter passphrase for key '/home/xxx/.ssh/github_id_rsa':
Hi xxxx! You've successfully authenticated, but GitHub does not provide shell access.
この方法で通った場合、~/.ssh/configファイルに以下設定を入れてあげてください。
GitHub用設定を入れている方は、IPQoS欄だけ追記してあげてください。
Host *
IPQoS = none
通った方向け解説
この設定で解決した方のインターネットは、NTT回線でIPoE接続されている方だと思います。
NTT回線(NGN)において、QoS(IPパケットの優先度設定)のパケットは「帯域優先機能」を提供しているサービスでしか転送保証されていません。
2.4.4 帯域優先に関する仕様
契約帯域の範囲で優先クラスを利用したIPv6(IPoE)通信が可能となるサービスにて、当該サービス契約者の端末
機器からIP通信網に送信されるIPv6パケットにおいて、RFC2474に規定される優先度の指定が可能です。当該サー
ビス契約者の端末機器からIP通信網に送信されるIPv6パケット(IPoE方式)のトラヒッククラスフィールドの先頭6
ビットに、DSCP値として8(001000)を指定することで、優先トラヒックとして転送します。
尚、指定された優先度以外が設定されたパケットの転送は保証しません。
参考: https://flets.com/pdf/ip-int-3.pdf
SSHのパケットはQoSがデフォルトでonになっており、NTT側でパケットがドロップされた結果、表示されない問題が発生していました。
この問題、Qiita内でもいくつか記事が存在します。
フレッツ光回線でscpが遅かった話: https://qiita.com/tango110/items/c8194d43b46fa2a712d1
フレッツ回線 + IPv6 環境で SSH できない: https://qiita.com/hoto17296/items/d8874a67b082dcc42516
解決方法は簡単、単にQoSを外してあげればいいだけです。
問題解決手順(興味のある人用)
ここからはどうやってこの問題を解決したのか、手順を残しておきます。
ネットで調べる
当たり前ですが、Permission denied (publickey).
等のエラー表示系記事は出てきますが、"何も出ない"系のエラーは見つかりませんでした。
繋がる端末と比較
同一ネットワーク内に、同じOS(Ubuntu22.04)を採用していて、ssh -T git@github.com
のテストが通る端末がありました。
(SSHがQoSにより不安定になる事象は知っていたので、昔にQoSの設定を入れていたものでした)
そこで、ssh -T -v git@github.com
(verbose mode)を行い、どこで引っかかるか確認を行いました。
sshの停止箇所までは確認できましたが、テストが通る端末とログを突き合わせても停止箇所までの挙動は同じでした。
少し時間をおいてsshの挙動を調べていたところ、sshのオプションに-vvv
(詳細出力を増やす)モードがあることを見つけました。
-vvvモードで再度ログの突き合わせを行ったところ、繋がらない側の端末にだけ、下記一行がありました。
debug3: set_sock_tos: set socket 3 IP_TOS 0x10
調べてみたらQoS関連だと判明し、sshとNTT回線の相性を思い出しました。
この問題、githubだけではなくssh周り全体の相性問題なので、頭の隅に入れておくといいかもしれません。