現象
私の PC (Ubuntu) で何故か GitLab だけ SSH (ssh -T git@gitlab.com
) が、
Connection to gitlab.com closed by remote host.
で接続に失敗する現象が起きていました。
実のところ、以前からこの問題が発生し続けていて気になっていたのですが、主に GitHub を使っていて GitLab を使うことはほぼ無いため暫く問題を放置していました。しかし、仕事で GitLab を使わざるを得なくなったので、重い腰を上げて調査してみました。
まずは、GitLab の SSH キー登録が expired していないかといった初歩的な確認をしたのですが特に問題なく、念の為 SSH キーを作り直して再登録してみたのですが、それでも GitHub への接続は成功しますが、GitLab だけが何故か失敗する状態でした。
GitLab は SSH キー登録時にデフォルトで有効期限が設定しているので、何も考えずにキー登録すると expire してしまいがちです。
どうやらキーの問題ではなさそうなので、クライアント側の通信設定の問題だろうと考えて色々と調べてみました。
なお、Ubuntu のバージョン(uname -v
)は次の通りです。
#25~22.04.1-Ubuntu SMP PREEMPT_DYNAMIC Tue Feb 20 16:09:15 UTC 2
対策方法
ググって調べた ssh git がタイムアウトする問題の対策方法を片っ端から試してみた結果、~/.ssh/config
で gitlab.com の SSH 接続設定に IPQoS 0
を追加することで正常に接続できるようになりました。
Host github
HostName github.com
IdentityFile ~/.ssh/id_rsa
User git
IdentitiesOnly yes
Host gitlab.com
HostName gitlab.com
IdentityFile ~/.ssh/id_rsa
User git
IdentitiesOnly yes
IPQoS 0
原因
以下の記事を参考にしました。