2020 ソフトウェア設計及び演習用の班Wiki

20::gr09::鈴木直揮::メモ::sshでgitlabにgit pull、git push出来ない理由

9班wiki > 鈴木直揮 > メモ > sshでgitlabにgit pull、git push出来ない理由

sshでgitlabにgit pull、git push出来ない理由

SSHの公開鍵登録

(山中はうまくできなかった(Apr 26, 2020).うまく設定できた人教えてください.)

とあったので「よっしゃあぁ!!!先生に教えてやるぜ!!!ssh大好きだし、イケるやろ!!!パスワード無しでpull、push出来たらありがたいし!!!」と色々とやってみたけれど、どうやっても出来ない事が分かってしまったので公開しておきます。(?)

決してsshが繋がると信じて時間を溶かした事によって生まれたストレスを発散するためではない。

TL;DR;

ファイヤーウォールやgitlab鯖に問題があって絶対ムリ

問題1: ファイヤーウォールの問題

後々説明するのが面倒そうなので、今回の説明で出てくるネットワークを取り敢えず挙げておきます。

  • VPN用ネットワーク
  • 教育用計算機(sshサーバー)用のネットワーク (多分端末室のパソコンもこの鯖と同じようなネットワーク設定になってる筈)
  • gitlab鯖のネットワーク

追記:【悲報】端末室のパソコン、VPN用ネットワークと同様に謎ファイヤーウォールが入っててssh用ポートがクローズされていて、繋がらない。これはセキュリティ関係ない気がするけど、何故・・・?

今回問題となっているファイヤーウォールはVPN用ネットワークとgitlab鯖のネットワークの間にのみ入っています。このファイヤーウォールは(実験結果からの予想だけれど)VPN用ネットワークからgitlab鯖の通信は、http用のポートとhttps用のポート以外のポートを全てクローズしています。

なので、VPN越しでhttpsでpull、pushは出来るのですが、ssh用のポートは閉じているのでsshでpull、pushをしようとすると繋がらないのにリトライをし続ける筈です。ちなみにgitlab鯖からVPN用ネットワークの通信は普通に通るので、ファイヤーウォールは片方向のみらしいです。

教育用計算機からgitlab鯖には普通に通信が出来ます。これから説明するgitlab鯖の問題はこの経路を使って検証してました。勿論、教育用計算機からVPN用ネットワーク、gitlab鯖のネットワークもOK。

今回は関係が無いけれど、教育用計算機はプライベートネットワークの中にあるのでどこからも直接接続は出来ません。接続用のルーター?鯖?からポートフォワードして接続されているみたいです。

謎ファイヤーウォールはcisco製みたい。webexとか色々とcisco製の物があるからciscoと岩手大学は仲が良いのかな?ところでnsfwとは何? Not Safe For Work? 追記:ciscoだと思ってたけど、調べたらfortigateっぽい(?)

問題2: gitlab鯖の問題

教育用計算機からならファイヤーウォールを通過できる!!!sshでpull、push出来る!!!と願ったけれど叶いませんでした・・・。というか、ファイヤーウォールはセキュリティ的にどうしようもない面があるのでしょうがないと言ってしまえばしょうがないのですが(sshぐらい開けても変わらんだろと思うけど)、こっちの方が深刻な問題かもしれません・・・。今回の条件では、ちゃんとgitlab鯖でssh接続が正常に出来る状態だったら、ファイヤーウォールなんか関係なかったりするので・・・。(後述)

SSHの公開鍵登録の手順に則って、教育用計算機でssh公開鍵を生成して、gitlab鯖に登録しました。(後述しますが、ちょっと違うコマンドを実行しました・・・。)

もし正常に設定されているとすれば、

ssh -T git@gitlab.cis.iwate-u.ac.jp

を実行すれば正常に動作しているという表示が返ってくる筈ですが、パスワードが求められます・・・。ちゃんと公開鍵が設定されている場合パスワードを求められる事はありません・・・。また、これで繋がらない場合、gitlab鯖にsshでgit pull、git pushは出来ません。

ちなみに、何故なのか分かりませんが、

ssh h30j0xx@gitlab.cis.iwate-u.ac.jp

を実行すると教育用計算機のように普通にログインが出来てしまいます。(は???)(悪用しないでね♡)まあ、ssh鯖を立てて、LDAPでログイン出来るようにしてしまうとこうなってしまうので・・・。他にもログイン出来る鯖があったりする・・・。

まとめ

現状、gitlab.cis.iwate-u.ac.jpにsshでgit push、git pullする事は出来ない。何故なら、教育用計算機のネットワークからしかgitlab鯖のssh用のポートにたどり着く事が出来ず、gitlab鯖の設定が誤っているのか、たとえgitlab鯖のssh用ポートにたどり着いたとしても、git pull、git push用のgitlabへのssh接続が正常に出来ないからである。

(山中はうまくできなかった(Apr 26, 2020).うまく設定できた人教えてください.)

うまく設定できる人はきっと存在しません!!!(白目)

(直して下さいお願いします・・・。)

まあ、sshが使えなくてもセキュリティ的には微妙だけどパスワード入力は省略出来たりするので、やりたい人はこれ見てね。

その他諸々

SSHの公開鍵登録に関して

公開鍵の作成方法として

ssh-keygen -t rsa -C "git configで設定したuser.emailアドレス" -b 4096

とあるのですが、sshクライアントがマジで古い化石じゃない限りは(私の主義主張、宗教的には)微妙なコマンドだなぁとは思います。教育用計算機のubuntu 16.04.3という化石でもed25519が使えますし、gitlabでもちゃんとsshが使えたとしたらed25519に対応しているそうなので、今回は

ssh-keygen -t ed25519 -C "コメントなのでホスト名でもメールアドレスでもコンピューターが識別出来るならなんでも良し"

の方が良いと思います。(ed25519の鍵長は256ビットで固定なので-b オプションは要らないです)

ed25519はrsaよりも暗号強度が高く、更に高速らしいので!(ed25519はイイぞ!)

もしgitlab鯖が正常にssh接続出来るように設定されていたならば

(本当はこれを書くつもりだったのに、全然接続出来なかったのでまるっきりテーマが変わってしまった。)

ファイヤーウォールがどうのこうのなどと前で言ってますが、今回の環境では教育用計算機という自由にssh接続をする事が出来るssh鯖があり、更にその鯖からgitlab鯖までssh用ポートが開いていたので、VPN用ネットワークからでもgitlab鯖にssh接続をする事が出来ます!(詳しくは、sshポートフォワーディングで調べてください!)

実際に出来るか確かめる手段としては、ssh01.cis.iwate-u.ac.jpにsshが出来るパソコンから、

ssh h30j0xx@ssh01.cis.iwate-u.ac.jp -L 9999:gitlab.cis.iwate-u.ac.jp:22 -N &
ssh -p 9999 h30j0xx@localhost

とコマンドを実行すると、gitlab鯖にログイン出来る筈です。(もうちょっと頑張るとgit pull、git push用の設定になるけれど、出来ないのに設定するのが面倒なのでやらない。)

git pull、git pushするプロトコルをhttpsからsshに変える方法

sshで接続出来たら書こうかなと思ってたけど、繋がらないのでやめます。気になる人は「git https ssh」みたいにググれば出てくる筈。


最終更新日:2020/06/19 12:24:08