GitLabでSSHキーを使用する
- プラン: Free、Premium、Ultimate
- 提供形態: GitLab.com、GitLab Self-Managed、GitLab Dedicated
GitLabにコードをプッシュするまたはプルするたびに、ユーザー名とパスワードを入力することなく、SSHキーを使用して安全に認証することができます。
GitLabでSSHキーを使用するには、次の手順を実行する必要があります:
- ローカルシステムでSSHキーペアを生成します。
- あなたのSSHキーをGitLabアカウントに追加します。
- GitLabへの接続を確認します。
高度なSSHキー設定については、高度なSSHキー設定を参照してください。
SSHキーとは
SSHは、公開キーと秘密キーの2つのキーを使用します。
- 公開キーは配布できます。
- 秘密キーは保護する必要があります。
公開キーをアップロードしても、機密データが漏洩することはありません。SSH公開キーをコピーまたはアップロードする際に、誤って秘密キーをコピーまたはアップロードしないように注意してください。
秘密キーを使用してコミットに署名することができ、これによりGitLabの使用とデータの安全性がさらに向上します。この署名は、公開キーを使用して誰でも検証できます。
詳細については、公開キー暗号としても知られる非対称暗号を参照してください。
前提条件
SSHを使用してGitLabと通信するには、以下が必要です。
- GNU/Linux、macOS、およびWindows 10にプリインストールされているOpenSSHクライアント。
- SSHバージョン6.5以降。それ以前のバージョンではMD5署名を使用していましたが、これは安全ではありません。
システムにインストールされているSSHのバージョンを表示するには、ssh -Vを実行します。
サポートされているSSHキーの種類
GitLabとの通信には、次のSSHキーの種類を使用できます。
| アルゴリズム | 備考 |
|---|---|
| ED25519(推奨) | RSAキーよりも安全で高性能です。OpenSSH 6.5 (2014) で導入され、ほとんどのオペレーティングシステムで利用可能です。すべてのFIPSシステムで完全にサポートされていない場合があります。詳細については、イシュー367429を参照してください。 |
| ED25519_SK | ローカルクライアントとGitLabサーバーの両方でOpenSSH 8.2以降が必要です。 |
| ECDSA_SK | ローカルクライアントとGitLabサーバーの両方でOpenSSH 8.2以降が必要です。 |
| RSA | ED25519よりも安全性が低いです。使用する場合は、GitLabは少なくとも4096ビットのキーサイズを推奨します。Goの制限により、最大キー長は8192ビットです。デフォルトのキーサイズは、ssh-keygenのバージョンによって異なります。 |
| ECDSA | DSAに関連するセキュリティ上の問題は、ECDSAキーにも適用されます。 |
既存のSSHキーペアを確認する
キーペアを作成する前に、キーペアがすでに存在するかどうかを確認します。
- ホームディレクトリに移動します。
.ssh/サブディレクトリに移動します。.ssh/サブディレクトリが存在しない場合は、ホームディレクトリにいないか、以前にsshを使用したことがないかのどちらかです。後者の場合は、SSHキーペアを生成する必要があります。- 次のいずれかの形式のファイルが存在するかどうかを確認します。
アルゴリズム 公開キー 秘密キー ED25519(推奨) id_ed25519.pubid_ed25519ED25519_SK id_ed25519_sk.pubid_ed25519_skECDSA_SK id_ecdsa_sk.pubid_ecdsa_skRSA(少なくとも4096ビットのキーサイズ) id_rsa.pubid_rsaDSA(非推奨) id_dsa.pubid_dsaECDSA id_ecdsa.pubid_ecdsa
SSHキーペアを生成する
既存のSSHキーペアがない場合は、新しいキーペアを生成します。
ターミナルを開きます。
キータイプと、後でキーを識別するのに役立つオプションのコメントを指定して、
ssh-keygen -tを実行します。一般的には、メールアドレスをコメントとして使用します。このコメントは.pubファイルに含まれます。例(ED25519の場合):
ssh-keygen -t ed25519 -C "<comment>"4096ビットRSAの場合:
ssh-keygen -t rsa -b 4096 -C "<comment>"Enterキーを押します。次のような出力が表示されます。
Generating public/private ed25519 key pair. Enter file in which to save the key (/home/user/.ssh/id_ed25519):デプロイキーを生成する場合、または他のキーを保存する特定のディレクトリに保存したい場合を除き、提案されたファイル名とディレクトリをそのまま使用します。
SSHキーペアを特定のホスト専用にすることもできます。
パスフレーズを指定します。
Enter passphrase (empty for no passphrase): Enter same passphrase again:ファイルの保存場所に関する情報を含む確認メッセージが表示されます。公開キーと秘密キーが生成されます。
秘密SSHキーを
ssh-agentに追加します。例(ED25519の場合):
ssh-add ~/.ssh/id_ed25519
GitLabアカウントにSSHキーを追加する
GitLabでSSHを使用するには、公開キーをGitLabアカウントにコピーします。GitLabは秘密キーにアクセスできません。
SSHキーを追加すると、GitLabは既知の侵害されたキーのリストと照合してチェックします。侵害されたキーは、関連する秘密キーが公に知られており、アカウントにアクセスするために使用される可能性があるため、追加できません。この制限は設定できません。
キーがブロックされている場合は、新しいSSHキーペアを生成します。
GitLabアカウントにSSHキーを追加するには:
公開キーファイルの内容をコピーします。これは手動で行うことも、スクリプトを使用することもできます。
これらの例では、
id_ed25519.pubをファイル名に置き換えてください。たとえば、RSAの場合は、id_rsa.pubを使用します。tr -d '\n' < ~/.ssh/id_ed25519.pub | pbcopyxclip -sel clip < ~/.ssh/id_ed25519.pubcat ~/.ssh/id_ed25519.pub | clipGitLabにサインインします。
右上隅で、アバターを選択します。
プロファイルを編集を選択します。
左サイドバーで、アクセス > SSHキーを選択します。
新しいキーを追加を選択します。
キーボックスに、公開キーの内容を貼り付けます。キーを手動でコピーする場合は、
ssh-rsa、ssh-dss、ecdsa-sha2-nistp256、ecdsa-sha2-nistp384、ecdsa-sha2-nistp521、ssh-ed25519、sk-ecdsa-sha2-nistp256@openssh.com、またはsk-ssh-ed25519@openssh.comで始まり、コメントで終わる可能性があるキー全体をコピーしていることを確認してください。タイトルボックスに、
Work LaptopやHome Workstationなどの説明を入力します。オプション。キーの使用タイプを選択します。
Authentication(認証)またはSigning(署名)のいずれか、またはその両方で使用できます。Authentication & Signing(認証と署名)がデフォルト値です。オプション。有効期限を更新して、デフォルトの有効期限を変更します。詳細については、SSHキーの有効期限を参照してください。
キーを追加を選択します。
SSH接続を確認する
SSHキーが正しく追加されていること、およびGitLabインスタンスに接続できることを確認します:
- 正しいサーバーに接続していることを確認するには、SSHホストキーのフィンガープリントを特定します:
- GitLab.comについては、SSHホストキーのフィンガープリントドキュメントを参照してください。
- GitLab Self-ManagedまたはGitLab Dedicatedの場合は、
gitlab.example.comがGitLabインスタンスのURLであるhttps://gitlab.example.com/help/instance_configuration#ssh-host-keys-fingerprintsを参照してください。
- ターミナルを開き、次のコマンドを実行します。
- GitLab.comの場合は、
ssh -T git@gitlab.comを使用します。 - GitLab Self-ManagedまたはGitLab Dedicatedの場合は、
gitlab.example.comがGitLabインスタンスのURLであるssh -T git@gitlab.example.comを使用します。
- GitLab.comの場合は、
デフォルトでは、接続にはgitユーザー名を使用しますが、GitLab Self-ManagedまたはGitLab Dedicatedの管理者はユーザー名を変更できます。
最初の接続時に、GitLabホストの信頼性を確認する必要がある場合があります。次のようなメッセージが表示された場合は、画面のプロンプトに従ってください:
The authenticity of host 'gitlab.example.com (35.231.145.151)' can't be established. ECDSA key fingerprint is SHA256:HbW3g8zUjNSksFbqTiUWPWg2Bq1x8xdGUrliXFzSnUw. Are you sure you want to continue connecting (yes/no)?ウェルカムメッセージが表示されます。
Welcome to GitLab, <username>!メッセージが表示されない場合は、SSH接続のトラブルシューティングを行うことができます。
SSHキーを表示する
次の手順でアカウントのSSHキーを表示できます。
- 右上隅で、アバターを選択します。
- プロファイルを編集を選択します。
- 左サイドバーで、アクセス > SSHキーを選択します。
既存のSSHキーがページの下部に一覧表示されます。情報には次のものが含まれます。
- キーのタイトル
- 公開フィンガープリント
- 許可されている使用タイプ
- 作成日
- 最終使用日
- 有効期限
SSHキーを削除する
SSHキーを取り消すか削除して、アカウントから完全に削除できます。
SSHキーでコミットに署名している場合、SSHキーを削除すると、他の影響もあります。詳細については、削除されたSSHキーで署名されたコミットを参照してください。
SSHキーを取り消す
SSHキーのセキュリティが侵害された場合は、キーを取り消します。
前提条件:
- SSHキーには、
Signing(署名)またはAuthentication & Signing(認証と署名)の使用タイプが必要です。
次の手順でSSHキーを取り消せます。
- 右上隅で、アバターを選択します。
- プロファイルを編集を選択します。
- 左サイドバーで、アクセス > SSHキーを選択します。
- 取り消したいSSHキーの横にある取り消しを選択します。
- 取り消しを選択します。
SSHキーを削除する
次の手順でSSHキーを削除できます。
- 右上隅で、アバターを選択します。
- プロファイルを編集を選択します。
- 左サイドバーで、アクセス > SSHキーを選択します。
- 削除したいキーの横にある削除( )を選択します。
- 削除を選択します。
SSHキーの有効期限
SSHキーをアカウントに追加するときに、有効期限を設定できます。このオプションの設定は、セキュリティ漏洩のリスクを制限するのに役立ちます。
SSHキーの有効期限が切れると、認証することやコミットへの署名に使用できなくなります。新しいSSHキーを生成し、アカウントに追加する必要があります。
GitLab Self-ManagedおよびGitLab Dedicatedでは、管理者は有効期限を表示し、キーを削除する際のガイダンスとして使用できます。
GitLabは、期限切れのSSHキーを毎日チェックし、通知を送信します:
- 01:00 AM UTC、有効期限の7日前。
- 02:00 AM UTC、有効期限当日。