【GitLab 公式 を訳してみた】GitLab SSHキー作成法

法律: IT 解説記事 GitLab セキュリティ フノス(訳者) マニュアル

 GitLab Documentation>GitLab SSH キー作成法

  Gitとは、配布共有型バージョン管理システムです。これをインストールしたローカル環境で作業ができる上に、他のサーバーに変更案を”プッシュ”することで自分の案を他の誰かと共有することができます。
 問題は、その情報共有の際に通信が発生することに関連して、セキュリティ上の障害が発生しやすいことです。

  あなたの変更案が、他の誰かのものにすり替えられたり、書き換えられたりしないために、SSHプロトコルを利用することが有効です。送信する機械と受信する機械とで、異常がなかったことが確認できれば、いちいちユーザー名とパスワードを入力しなくても、きちんとあなたが送信した案であることが証明されます。

  まずは、SSHプロトコルがどのような働きをするかについて、DigitalOceanというサイトに分かりやすい説明があったので、それを読んでみるとよいかもしれません。

 

  現在のSSHキーペア置き場を確認しよう

  新しいSSHキーペアを作成する前に、シェルを開いてシステムの中にSSHキーを置く場所が用意されているかどうかを確かめましょう。それぞれのOSのコマンドは以下の通りです。

 Windows コマンド プロンプト:

======================
 type %userprofile%\.ssh\id_rsa.pub
======================
(¥はバックスラッシュの誤変換です。)

 Windows の Git Bash / GNU/Linux / macOS / PowerShell:

======================
 cat ~/.ssh/id_rsa.pub
======================

  まず最初に「ssh-rsa」という表示があった場合は、SSHキーペアが既にシステム内に存在していることになります。次の工程として説明されている、ポーションの生成を飛ばして、クリップボードにコピーする段階に進んでください。
 この表示がなかった場合は、独自名が付いたSSH キーペアを生成しなくてはならないので、次の工程に進みます。

  パブリックSSH キーは次のように命名します。


  SSHキーペアを新規作成する

 1.次のコマンドで、SSHキーペアを作成してください。

 Git Bash on Windows / GNU/Linux / macOS:

======================
 ssh-keygen -t rsa -C "your.email@example.com" -b 4096
======================

 Windows:

  Windowsの場合、SSH キーを生成するには、PuttyGenをダウンロードする必要があります。SSH キーペアの生成法については、こちらの説明書を参考にしてください。
 

 2.つぎに、皆さんがSSHキーペアを保管しているファイルに、パスを設けます。

  SSHキーペアをまだ生成していない段階で、パスを設けてはいけません。
 一度システムにSSHキーがあることを認識されてしまうと、後から設定の書き換えができなくなります。システムは、そこにSSHキーがある前提で動いています。その代わりに、キーがあれば自動的に認証されるわけですが、なかった場合はただ変更の効かないファイルができあがるだけです。

  SSHキーペアが存在しているファイルに、パスを出した場合は自動的に、「.ssh/config」ファイルにある設定の一部として、「このホストでは通信に、次のSSHキーペアを使用する」ことが宣言されます。詳しくは、このページの「デフォルトではないSSHキーペアのパスを使う場合」の章をご覧ください。
 

 3.ファイルパスを入力できたら、次はSSHキーペアを守るためにパスワードを設定します。この設定については、できればやっておくに越したことはないものですので、必要がないと判断した場合はパスワードを設定せずに、そのまま enterを押してください。

 注:SSHキーペアのパスワードを変更する時には、「ssh-keygen -p 」というコマンドを使います。
 

 4.公開SSHキーをコピーします。


  クリップボードにコピーするコマンドは、OSによって異なります。

  macOS:

======================
 pbcopy < ~/.ssh/id_rsa.pub
======================

  GNU/Linux (xclip パッケージ を インストールしておいてください):

======================
 xclip -sel clip < ~/.ssh/id_rsa.pub
======================

  Windows Command Line:

======================
 type %userprofile% \.ssh \id_rsa.pub | clip
======================
(¥はバックスラッシュの誤変換)

  Windows の Git Bash / Windows PowerShell:

======================
 cat ~/.ssh/id_rsa.pub | clip
======================
 

 5.最後に、公開SSH キーをGitLabに追加します。

 「Profile Settings」から「SSH Keys」タブに移動して、「Key」という欄に先ほどコピーしたSSHキーを貼り付けます。そのカギに「Title」を付けておいた方が、後から使う時に困りません。ここにつける名前は、接続相手の機械がすぐさまわかる名前にすることを強くお勧めします。(たとえば、「Work Laptop - Windows 7」や「Home MacBook Pro 15」など。)

  公開SSHキーを手動でコピーする際には、きちんと「ssh-rsa」から、皆さんのemailまでを範囲指定することを忘れないでください。

  試しに、「ssh -T git@example.com(『example.com』の部分だけ皆さんのGitLabドメインに置き換えて)」を実行してみましょう。「Welcome to GitLab 」というメッセージが表示されれば、合格です。

 

  デフォルトではないSSHキーペアのパスを使う場合

  GitLab SSH キーペアに対をデフォルト以外のファイルに配置して、そこにパスだけを与えて使用する場合は、皆さんのSSHクライアントを設定する必要があります。GitLabサーバー(それから GitLab.com)との接続の際に、GitLabプライベートSSHキーを検出するために、この設定が重要です。

  次のコマンドを使います。「other_id_rsa」とされている部分は、皆さんのプライベートSSHキーに置き換えてください。
 

 Windows の Git Bash / GNU/Linux / macOS:

======================
 eval $(ssh-agent -s ) ssh-add ~/.ssh/other_id_rsa
======================

  この設定を保持するためには、これを記した設定ファイルをどこかに保存してなくてはなりません。
 OpenSSHクライアントは、だいたいのオペレーティングシステムで、「~/.ssh/config」ファイルに保存することになっています。

 リモート環境の設定は、GitLab.comと、プライベートサーバーに展開したGitLabとで方法が違いますので、ご注意ください。

 GitLab.comの場合
======================
Host gitlab.com

RSAAuthentication yes

IdentityFile ~/.ssh/config/private-key-filename-01
====================== 

 プライベートGitLabサーバーの場合

======================
Host gitlab.company.com

RSAAuthentication yes

IdentityFile ~/.ssh/config/private-key-filename
======================

  ここで説明したのは、あくまでほんの一例であり、実際はSSHクライアントに応じて様々な設定オプションを満たさなくてはならない可能性があります。それはここでは割愛させていただきますので、あとは各自で説明書を見るなりして解決してください。

  公開SSHキーは使いまわしができません。これは皆さんを自動識別するために設けられたツールですので、キーと皆さんのアカウントは紐づけられることになります。
 そのため、SSH キーを設置しておくと、プッシュをする際に本人認証の手間が省けます。

 

  Deploy keys

 レポジトリごとのDeployキー

  Deploy キーは、SSH キーペアを使った「読み込み限定」や「読み書き可能(許可していれば)」アクセスを、1つあるいは複数のプロジェクトで実現するものです。

  これは皆さんのレポジトリを、 継続的インテグレーション(CI)サーバーにクローンする際によく使われます。これを利用すると、ダミーのユーザーアカウントを作らなくても、CIサーバーを使うことができます。

  プロジェクトのマスターか所有者である方なら、プロジェクトの設定ページの「Repository」という項目に、Deployキーを設けることができます。
 Deployキーにも分かりやすい名前と、公開キーをコピペすることを忘れずに。たったこれだけで、「読み込み限定」や「(許可していれば)読み書き可能」などの全ての通信が、設定したプライベートSSHキーを介したものになります。
 

  一度入れてしまったDeployキーを、もう一度同じ欄に入れることはできません。
 他のプロジェクトと同じキーを追加する場合は、「Deploy keys from projects available to you」に許可を出してください。全てのプロジェクトに置かれている、どのDeployキーに対しても、プロジェクトやグループなどの直接のメンバーであるならば、誰でもアクセスすることができます。
 Deployキーをプロジェクト間で共有するには、それぞれのプロジェクトに同じキーを設定してください。
 

  全てのレポジトリで使える、共有 Deployキー

  Global Shared Deploy keysを使うと、SSH キーペアを使った「読み込み限定」「読み書き可能(許可していれば)」アクセスが、同じGitLabサーバーに存在する全てのプロジェクトに適用されます。

  レポジトリ全体の安全性を高めるほか、共有 継続的インテグレーション(CI)サーバーを始めとるする、あらゆる共有サービスを不正アクセスの脅威から遠ざけます。GitLabのシステム管理者は、Global Shared Deploy keyを仕掛けることで、全ての共有サービス通信時に秘密鍵を使わせることができます。プロジェクトのマスター(あるいはそれ以上)の決定で、それぞれのレポジトリをどこかに公開する時には、このSSHキーが使われます。

  それぞれのプロジェクトごとにDeployキーを設けるよりも、Global Shared Keysを利用した方が、より高い安全性を確保できます。このキーを閲覧できるのは、システムを管理している者のみで、それを知る必要がないユーザーに対しては公開されないようになっているのです。

  管理者は、GitLabの管理者領域から「Deploy Keys」の項目に移動して、Global Deploy keysを設置することが可能です。
 Global Deploy keys につけたタイトル(名称)は、プロジェクトのマスターやオーナーに知らせて、それぞれのプロジェクトに導入してもらうとよいでしょう。たとえば、SaaS に設けた CI に安全なアクセスを実施したい場合には、「SaaS CI」用であることが一目でわかるような名前にすると、マスターたちに利用してもらえるはずです。Global Shared Deploy keysを作成する時に、そのキーがどのようなときに使われるものかの説明文を、タイトルにしてしまってもよろしいかもしれません。「レポジトリに読み込み限定アクセスする時に必要な鍵」など、こんな調子で構わないでしょう。

  Global Deployment keyを導入したサーバーなら、プロジェクトマスター、オーナーらが各自、自分のプロジェクトで簡単な設定をするだけで、Deploy Keyを導入することができます。
 プロジェクトの「Settings > Repository」に移動して、「Deploy Key」という項目で「Enable」をクリックします。
 次に、そのサーバーで利用可能な公開鍵のリスト(Public deploy keys available to any project)が表示されますので、その中から適切な鍵を選んでください。

 注:Public deploy keys available to any project」リストに表示される公開鍵は、Global Deploy Key として登録されたものだけです。

 警告:Global Deploy Keysを使ってプロジェクトを公開しても、Global Deploy Key そのものが公開されることはありません。この場合、Global Deploy Keys は他のシステムからの通信を許可していますので、一見するとそれが設定されていることは分かりづらくなっています。しかし、外部の者が勝手にシステム内部まで接続しようとすると、きちんと防御される仕組みです。


 

  アプリケーションにSSHキーを設ける

  Eclipse

  「Eclipse」というアプリケーションに、SSH キーを設けるには、次のページを参考にしてください。:https://wiki.eclipse.org/EGit/User_Guide#Eclipse_SSH_Configuration

  GitLab サーバー上で SSHキーを管理する

  GitLabには、拡張機能の一種として、システムの中にSSHデーモンが組み込まれています。そこで、ユーザー(よくある名前としてgit)に対して、彼らが全てのアクセスに利用するSSHキーを割り当てることができます。そこで鍵を手に入れたユーザーたちは、GitLabサーバーの中をSSH キーを使いながら通信することになりますから、SSH キーでどのユーザーが接続しているかを判別できるようになっているのです。

  SSHクライアントから、各ユーザーの動向を管理することは実に簡単です。しかし、ユーザーが個人でプライベートSSH キーを認証に使用してしまうなど、SSHキー設定を加工してしまうと、もはやSSHクライアントでは把握しきれなくなります。従って、セキュリティ面での安全性が大幅に下がることになってしまいます。

  サーバー管理者の皆さんには、きちんとそのことを踏まえて、次のような設定を施すことをお勧めします。

======================
$ gitlab-rake gitlab:check
# ...
Git user has default SSH configuration? ... no
 Try fixing it:
 mkdir ~/gitlab-check-backup-1504540051
 sudo mv /var/lib/git/.ssh/id_rsa ~/gitlab-check-backup-1504540051
 sudo mv /var/lib/git/.ssh/id_rsa.pub ~/gitlab-check-backup-1504540051
 For more information see:
 doc/ssh/README.md in section "SSH on the GitLab server"
 Please fix the error above and rerun the checks.
======================

 これは、ユーザー個人がSSHキー関連の設定をする機能を消去する設定です。
 ただし、これらの設定は、個人でのチューニングに当たりますので、これが原因でシステムが停止しても、我々は一切の責任を負いかねます。

 

  トラブル・シューティング

  SSHを設定したサーバーで、Gitのクローン機能を利用する際に「git@gitlab.com's password:」のようなパスワードを入力した場合、問題が起こることがあります。

 Edit this page

 

 

 

 

 

 

 

 

2018-03-23 22:37:34 / Hnoss
原文サイトを表示
[ 原文 ] https://docs.gitlab.com/ee/ssh/README.html
原文ページプロジェクト並びにドキュメントファイルは、MIT Licenseのもと公開されています。(URL:https://gitlab.com/gitlab-com/gitlab-docs/blob/master/LICENSE) この記事の文章は、訳者の判断によりCreative Commons BY (version 3.0) を適用するものとします。