git で push しようとしたら Connection timed out したお話
状況
AWS 上から git push
をしようとしたら、2分ほど待機したのちエラーが返ってくる。
原因
AWS のインスタンスのセキュリティグループのアウトバウンドに git 用のポートを指定していなかった。
諸般の事情で git の中央リポジトリは、 22,80,443 といった一般的なポート以外を使うようにしていた。
当たり前のことだ。
AWS 使うならセキュリティグループの設定は当たり前のことじゃろ?
なぜハマった?
インスタンスを構築した人とその上にアプリを構築した人は違う人で、構築してから数年経っており、その人たちはすでにいない状態。
さらにドキュメントも残ってないという酷い状態だった。
そのうえ git clone
など git を使った形跡があって、それなら普通にできるはずだと思い込んでいた。
おそらくだが、構築中はノーガードだったのだろう。
で、構築完了してからセキュリティ的なことに気づき、設定したものの git の設定をしなかった。
そしてサイト自体は CMS なので、直接ファイル更新することもなく、誰も git を使うことなく今日まで来てしまった。
原因究明の旅
とりあえず git push
fatal: unable to access 'https://git-no-server.com:00000/git/git-repo/': Failed to connect to git-no-server.com port 00000: Connection timed out
Basic 認証はかかっていない。
当然 ID/PW は設定されているが、その応答すらでない。
だいたい2分超くらいでタイムアウトしていた。
git サーバは生きてるのか?
生きてた
他のサーバで git push できるのか?
できた
このサーバ(インスタンス)から git サーバに接続できるのか
curl https://git-no-server.com:00000/
を発行。
応答: curl: (7) Failed to connect to git-no-server.com port 00000: Connection timed out
おっと?
git サーバでこの ip を制限してないか?
hosts.deny
-> ない
hosts.allow
-> フルオープン (それもどうなんだ?)
このサーバからのアクセスログが git サーバにあるか?
ない
https の設定か? (git サーバはオレオレ証明書だった…)
echo $SSH_ASKPASS
-> 空行
git config --list
-> http.sslverify=false
がある
問題なさそう。
ということは、このサーバから出られてないよね
サーバから出られないといえばファイアウォール。
ファイアウォールといえば iptables
と思ったけど、基本の AWS インスタンスはそれを利用しない。
全てコンソールのセキュリティグループで行うので、ブラウザからコンソールにログイン。
アウトバウンドに該当のポートの設定がないことを確認。
[ カスタム TCP ルール | TCP | 00000 | 0.0.0.0/0 ] 追加。
git push
できた!!!!
反省
ドキュメント書こう
ほんと書いてください。
デザイナも git 使お?
そもそもサイトが設置してあるサーバから push しようって思ったのが、中央リポジトリとサーバに多量の差分があることに気づいたからだ。
どうも歴代のデザイナたちは、必要に応じて FTP でファイルをアップロードしていたようだ。
仕事上作成したならソース1行だろうがアイコン1枚だろうが全て会社の財産なので、適切に管理すべきなのだ。
いちいち git するのは面倒くさい?
それもわかる。
わかるが、お願いします。
Discussion