gitlab に ssh で接続する備忘録です.
個人的に立てている gitlab-ce に ssh で接続するのに少しハマったのでその備忘録です.
公式の情報
公式の情報は,
です.また,公式の情報を日本語化したらしいものも
に公開されています.しかし,情報量が多いのと,gitlab 特有のお作法があるせいでイマイチ分かりにくくてかなりハマってしまいました.
大前提
まず,大前提として,
- 接続するときに使うのは git コマンド.ssh コマンドではない!
- 実際に接続するユーザーのユーザー名は使用されない!
なことを理解しておかないとダメです.
例えばリポジトリを clone する場合は以下のように行います.
$ git clone [email protected]:hyt/sample-repository.git
接続先の指定が git@… となっていて,接続するユーザー名が git なので本当にこれで良いのかという気がしますが,これで良い.実際に,公式の説明に,
GitLab はシステムにインストールされた SSH デーモンとインテグレーションし,すべてのアクセス要求が処理されるユーザー(通常はgit )を指定します。SSH で GitLab サーバーに接続するユーザーは、ユーザー名の代わりに SSH キーで識別されます.
とあります.
つまり,
GitLab に ssh で接続するときは,ユーザー名 git で接続します.そして,接続が許されるかは GitLab に ssh の公開鍵が登録されているか否かで決まる!
ってことです.ユーザー名 git に公開鍵を登録すると思えば良いわけですね.
設定方法
したがって,設定は基本的には次の手順で良い訳です.
- GitLab との接続に使用する秘密鍵・公開鍵を作る
- 上で作った鍵が ssh コマンドから参照できるようにする(オプション)
- 公開鍵を GitLab に登録する
公開鍵・秘密鍵を作る
これは普通にやれば良いだけです.ただし,使える鍵の種類にはもちろん制限がありますが,普通に作れば普通はこの制限には引っかからないハズです.
念のため,鍵の方式に応じて作るコマンドを以下に記しておきます.
$ ssh-keygen -t rsa -b 2048 -C "<comment>" # RSA 2048bit の場合 $ ssh-keygen -t ed25519 -C "<comment>" # Ed25519(エドワーズ曲線デジタル署名)の場合 $ ssh-keygen -t ecdsa -c "<commnent>" # 楕円曲線暗号の場合
なお,実際に作ると,例えば RSA だと,~/.ssh 以下に,
- id_rsa : 秘密鍵
- id_rsa.pub : 公開鍵
ができます.GitLab に登録するのはもちろん公開鍵なので,この場合は id_rsa.pub の中身を登録すれば良いということですね.
ssh から鍵を参照できるようにする
前節の通り鍵を作った場合は,~/.ssh 以下に鍵が保存されますし,通常はここに鍵が保存されていれば ssh コマンドから自動的に参照されるはずなので,この作業は省略できます.
ただし,例えば,ssh でどこかリモートホストにログインしていて,そのリモートホストから GitLab に接続したい場合とかだと,リモートホストには普通は自分の鍵は置いてないでしょうから,この作業をやらないといけません.これが公式にある ssh-agent の説明です.
実際の使用例は以下のような感じでしょうか.
$ eval $(ssh-agent -s) $ ssh-add ~/.ssh/id_ecdsa $ ssh -l hyt remotehost.local -A # -A オプションで ssh-angent が使えるようになる $ ssh-add -l # 2行目で登録したキーが確認できる $ git clone [email protected]:hyt/sample-repository.git
正直言うと,長いこと ssh 使ってきましたが,こんな機能あったんですね.今回調べて初めて気がつきました.
GitLab に鍵を登録する
これは GUI で登録するのですが,公式の説明は言葉で誘導しているだけで,画面イメージが無いので,私の場合は,登録するところなかなか見つけられませんでした.実はここに一番時間がかかってしまいました.
まず,GitLab に普通にログインすると「プロジェクト」画面になりますが,ここで,左のメニューを表示させます.
次に「アバター」のロゴ(上の画面だと紫色の花っぽいロゴ)をクリックして,メニューから「プロファイルの編集」を選択します.
で,出てくる画面のメニューを再度表示させると,その中に「SSHキー」があるので,それを選択します(私の場合はこれに気がつくのにすごく時間がかかってしまった).
すると SSH キーを登録する画面が出てきます.
あとはここに最初の手順で作成した公開鍵(RSA 鍵なら ~/.ssh/id_rsa.pub の中身)を登録すれば終了です.
補足
基本的にはこれで GitLab に ssh で接続できるようになるはずですが,例えば,
- 同じリポジトリに複数アカウントで接続する
- リポジトリごとに異なる鍵を使用する
とか,2段階認証とかやりたい場合はもう少し設定しないといけません.これらは一応公式マニュアル
に情報はあるのですが,説明が素っ気なくて,少なくとも私にはよく理解できないところが多いです.まぁ,実際使うときは試行錯誤するしかないかなって思っています.
以上!