GitHubのSSHキーを生成する方法

公開: 2022-02-05

GitとGitHubは、すべての開発者にとって不可欠なツールです。 それらは、ほぼすべての種類のソフトウェア開発プロジェクトで広く使用されています。

GitlabやBitbucketなどの他のGitホスティングサービスもありますが、GitHubは開発者にとって最も人気のある選択肢です。 プロフィールを編集して、採用担当者にとってより魅力的に見えるようにすることもできます。

GitとGitHubを使用して、プロジェクトを整理したり、他の開発者と共同作業したり、もちろん、Kinstaで作業したりできます。

ただし、GitとGitHubは関連しているが異なるツールであるため、それぞれを使用してワークフローを常に更新する必要があります。

マシンごとにSSHキーを使用することをお勧めします。 したがって、このチュートリアルでは、それらが何であるか、それらの利点のいくつか、およびGitHubSSHキーを生成および構成する方法を学習します。

始めましょう!

SSHキーとは何ですか?

簡単に言うと、SSHキーは、インターネットを介したリモートコンピューターへの安全なアクセスを可能にするSSH(Secure Shell)プロトコルに使用される資格情報です。 通常、その認証はコマンドライン環境で行われます。

このプロトコルはクライアントサーバーアーキテクチャに基づいています。つまり、ユーザー(または「クライアント」)は、SSHクライアントと呼ばれる特別なソフトウェアを使用して、リモートサーバーにログインし、コマンドを実行する必要があります。 これは基本的に、GitHubへの端末を介して認証するときに行っていることです。

2つのコマンドを表示するターミナル:「gitcommit -am」構造化プログラミングのサンプルファイルにコメントを追加」と「gitpush」、GitHubサーバーからの成功応答
Gitプッシュ。

ただし、SSHはGitHubにのみ使用されるわけではありません。 Kinsta、Google Cloud、Amazon Webサービスなどの他のプラットフォームで広く使用されており、サービスにアクセスするための安全なチャネルを作成します。

ここで、SSHキーが実際にどのように機能するかを見て、公開キーと秘密キーの違いを理解する必要があります。

公開鍵と秘密鍵

基本から始めましょう。

SSHプロトコルは、非対称暗号化と呼ばれる暗号化の手法を使用します。 この用語は複雑で奇妙に聞こえるかもしれませんが、真実から遠く離れることはできません。

基本的に、非対称暗号化は、公開鍵と秘密鍵のペアを使用するシステムです。

ご想像のとおり、公開鍵は誰とでも共有できます。 その主な目的は、データを暗号化し、メッセージを秘密のコードまたは暗号文に変換することです。 このキーは通常、インターネット経由で送信する前にデータを暗号化するために、他のシステム(サーバーなど)に送信されます。

一方、秘密鍵はあなたが自分自身に保持しなければならないものです。 これは、暗号化されたデータを公開鍵で復号化するために使用されます。 それがなければ、暗号化された情報をデコードすることは不可能です。

この方法により、ユーザーとサーバーは情報を送信するための安全な通信チャネルを維持できます。

SSH経由でサーバーに接続すると、バックグラウンドで次のようになります。

  1. クライアントは公開鍵をサーバーに送信します。
  2. サーバーは、秘密鍵を使用して公開鍵で暗号化されたランダムメッセージに署名するようにクライアントに要求します。
  3. クライアントはメッセージに署名し、結果をサーバーに転送します。
  4. クライアントとサーバーの間に安全な接続が確立されます。

秘密鍵を安全に保管し、いかなる状況でも誰とでも共有することが重要です。 それらは文字通りあなたに送られるすべての情報への鍵です。

GitHubでのSSHキーの使用

2021年8月13日以降、Githubはコマンドラインアクセスのパスワード認証を受け付けなくなりました。 これは、個人アクセストークンを介して認証するか、SSHキーを使用する必要があることを意味します(もう少し便利です)。

ターミナルでHTTPを介してGitHubパスワードで認証しようとすると、次のようになります。

 Username for 'https://github.com': yourusername Password for 'https://[email protected]': remote: Support for password authentication was removed on August 13, 2021. Please use a personal access token instead. remote: Please see https://github.blog/2020-12-15-token-authentication-requirements-for-git-operations/ for more information. fatal: Authentication failed for 'https://github.com/yourusername/repository.git/'

GitHubには、SSH経由でリポジトリを編集することを許可するための公開鍵が必要です。

SSHキーをローカルで生成する方法を見てみましょう。

SSHキーをローカルで生成する方法

SSHプロトコルと、公開鍵と秘密鍵の違いについて少し理解したところで、次は、マシンとGitHubリポジトリの間に安全なSSHチャネルを設定します。

先に進む前に、GitHubアカウントと、システムにGitがインストールされたターミナル/コマンドプロンプトが必要です。 Windowsを実行している場合は、Git bashがインストールされていることを確認してください。Gitbashには、このチュートリアルに加えて従う必要のあるすべてのツールが組み込まれています。

OpenSSHクライアントは、SSH経由で接続するために使用される最も人気のあるオープンソースソフトウェアです。 Linux、macOS、およびWindows 10にはデフォルトでインストールされているため、オペレーティングシステムについて心配する必要はありません。

ローカルSSHキーを生成するには、Windowsではコマンドプロンプトを起動するか、Unixベースのシステムではターミナルを起動する必要があります。 通常、これを行うには、アプリケーションパネルで「terminal」、「cmd」、または「powershell」を検索し、表示されるアイコンをクリックします。

「TerminalEmulator」、「Alacritty」、「Kitty」など、さまざまな端末アプリケーションを表示するアプリケーションファインダー。
ターミナルアプリケーション検索。

これを行うと、次の画像のようなウィンドウが表示されます。

魚の殻を実行する半透明のターミナルアプリケーション。
ターミナルアプリケーション。

次のコマンドを実行して、ローカルSSHキーのペアを生成します。

 ssh-keygen -t ed25519 -C "[email protected]"

秘密を告げる時が来ました:誰もこのコマンドを本当に覚えることができません! ほとんどの開発者は、次の理由で毎回グーグルする必要があります。

  1. これは非常に長いコマンドであり、忘れられがちなランダムに見える数字が含まれています。
  2. 使用することはめったにないので、ほとんどの場合、メモリにコミットする価値はありません。

ただし、端末に導入する各コマンドを理解することが重要なので、このコマンドの各部分の意味を見てみましょう。

  • ssh-keygen:SSHキーの新しいペアを作成するために使用されるコマンドラインツール。 あなたはssh-keygen helpでそのフラグを見ることができます
  • -t ed25519: -tフラグは、キーペアのデジタル署名を作成するために使用されるアルゴリズムを示すために使用されます。 システムがそれをサポートしている場合、 ed25519はSSHキーペアを作成するために使用できる最良のアルゴリズムです。
  • -C「電子メール」: -cフラグは、公開鍵の最後にカスタムコメントを提供するために使用されます。これは通常、電子メールまたは鍵ペアの作成者のIDです。

ターミナルにコマンドを入力したら、キーを保存するファイルを入力する必要があります。 デフォルトでは、ホームディレクトリの「.ssh」という名前の隠しフォルダにありますが、好きなように変更できます。

次に、キーペアに追加するパスフレーズの入力を求められます。 これにより、いつでもデバイスが危険にさらされた場合に、セキュリティの層が追加されます。 パスフレーズを追加する必要はありませんが、常にお勧めします。

プロセス全体は次のようになります。

キーが保存されるファイル「/home/daniel/.ssh/kinsta_keys」、パスフレーズ入力、および結果のキーフィンガープリントを含むさまざまなメッセージを含むssh-keygenコマンド。
ssh-keygenコマンド。

ご覧のとおり、このコマンドは、選択したディレクトリ(通常は〜/ .ssh )に2つのファイルを生成します。拡張子が.pubの公開鍵と、拡張子のない秘密鍵です。

公開鍵をGitHubアカウントに追加する方法については後で説明します。

SSHキーをssh-agentに追加します

ssh-agentプログラムはバックグラウンドで実行され、秘密鍵とパスフレーズを安全に保持し、sshで使用できるように準備します。 これは、サーバーに接続するたびにパスフレーズを入力する手間を省く優れたユーティリティです。

このため、このエージェントに新しい秘密鍵を追加します。 方法は次のとおりです。

  1. ssh-agentがバックグラウンドで実行されていることを確認してください。
     eval `ssh-agent` # Agent pid 334065

    すべてが正常であれば、これに似たメッセージが表示されます。 これは、ssh-agentが特定のプロセスID(PID)で実行されていることを意味します。

  2. SSH秘密鍵(拡張子のないもの)をssh-agentに追加します。
     ssh-add ~/.ssh/kinsta_keys

    kinsta_keysをSSHキーの名前に置き換えます。 これが作成した最初のキーである場合は、「id_algorithm_used」という名前にする必要があります(例: id_ed25519)

SSHキーをGitHubアカウントに追加します

最後のステップは、公開鍵をGitHubアカウントに追加することです。 次の手順に従ってください。

  1. SSH公開鍵をクリップボードにコピーします。 テキストエディタでファイルを開いてコピーするか、ターミナルを使用してファイルの内容を表示できます。
     cat ~/.ssh/kinsta_keys.pub # ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIJl3dIeudNqd0DPMRD6OIh65tjkxFNOtwGcWB2gCgPhk [email protected]
  2. [GitHub]にログインし、ページの右上のセクションに移動して、プロフィール写真をクリックし、[設定]を選択します。

    GitHubの右上のパネルには、[設定]セクションを指す矢印が付いたさまざまなセクションが表示されます。
    GitHubの設定。

  3. 次に、設定のプロファイルで、 SSHキーとGPGキーをクリックします。

    SSHおよびGPGキーオプションを表示するプロファイル設定パネル。
    SSHおよびGPGキー。

  4. [新しいSSHキー]ボタンをクリックします。

    [新しいSSHキー]ボタンを指す矢印の付いた[SSHキー]セクション。
    新しいSSHキーボタン。

  5. GitHubで新しいSSHキーにタイトルを付けます。通常、そのキーを使用するデバイスです。 次に、キーを[キー]領域に貼り付けます。

    「タイトル」フィールドと「キー」フィールドを使用して、新しいSSHキーフォームを追加します。
    新しいSSHキーフォームを追加します。

  6. SSHキーを追加します。

    SSHキーボタンを追加します。
    SSHキーボタンを追加します。

リポジトリプッシュを使用してSSH接続をテストする

これまでに行ったすべてのことをテストする時が来ました。 SSHを使用して、既存のリポジトリの1つを変更、コミット、およびプッシュして、接続が正しく設定されていることを確認します。

すべてのKinstaホスティングプランには、ベテランのWordPress開発者およびエンジニアによる24時間年中無休のサポートが含まれています。 Fortune500クライアントを支援しているのと同じチームとチャットします。 私たちの計画をチェックしてください!

この例では、Git forWebDevelopmentチュートリアルで作成した単純なHTMLサイトを変更します。

まず、リポジトリをローカルマシンに複製する必要があります。 GitHubのリポジトリページに移動して、提供されているSSHアドレスをコピーできます。

SSHクローンコマンドを示すGitHubページ。
SSHクローンコマンド。

次に、ターミナルを使用してリポジトリのクローンを作成します。

 git clone [email protected]:DaniDiazTech/HTML-site.git

それでは、 index.htmlファイルに簡単な<h1>タグを追加しましょう。

 ... <div class="container my-2"> <h1 class="text-center">A new title!<h1> </div> <div class="container my-3"> ...
「新しいタイトル」というタイトルのシンプルなHTMLサイトと、ハイテクアイテムの4枚の写真。
シンプルなHTMLサイト。

この編集を簡単にするために、JavaScriptやCSSには触れていません。 しかし、JavaScriptに精通している場合は、Kinstaで場所を見つけることができます。 Kinstaチームの一員になるために必要なコーディングスキルを確認してください。

これを行った後、変更をコミットします。

 git commit -am "Added a simple title"

そして、通常どおりにそれらをGitHubにプッシュします。

 git push

すべてがうまくいったら、おめでとうございます! マシンとGitHubの間にSSH接続を設定するだけです。

さまざまなGitHubアカウントの複数のSSHキーを管理する

複数のGitHubアカウントを持っている場合(たとえば、個人プロジェクト用と仕事用に1つずつ)、両方にSSHを使用することは困難です。 通常、異なるGitHubアカウントに対して認証するには、別々のマシンが必要になります。

ただし、これはSSH構成ファイルを構成することで簡単に解決できます。

入りましょう。

  1. 別のSSHキーペアを作成し、それを他のGitHubアカウントに追加します。 新しいキーを割り当てるファイルの名前を覚えておいてください。
     ssh-keygen -t ed25519 -C "[email protected]"
  2. SSH構成ファイルを作成します。 設定ファイルは、sshプログラムにどのように動作するかを指示します。 デフォルトでは、構成ファイルが存在しない可能性があるため、.ssh/フォルダー内に作成します。
     touch ~/.ssh/config
  3. SSH構成ファイルを変更します。 設定ファイルを開き、以下のコードを貼り付けます。
     #Your day-to-day GitHub account Host github.com HostName github.com IdentityFile ~/.ssh/id_ed25519 IdentitiesOnly yes # Work account Host github-work HostName github.com IdentityFile ~/.ssh/work_key_file IdentitiesOnly yes

これで、仕事用またはセカンダリアカウントを使用してSSH経由で認証する必要があるたびに、次の場所からリポジトリSSHアドレスを少し調整します。

 [email protected]:workaccount/project.git

…に:

 [email protected]:workaccount/project.git

概要

おめでとうございます— SSH経由でGitHubに接続するために必要な実践的な知識のほとんどを学びました!

このチュートリアルでは、SSHプロトコルの必要性、公開キーと秘密キーの違い、キーの生成方法、GitHubへの追加方法、さらには異なるGitHubアカウントの複数のSSHキーの管理方法について説明しました。 すべてにアクセスできなくなる場合を除いて、秘密鍵はそのままにしておく必要があることに注意してください。つまり、秘密です。

この知識があれば、GitとGitHubを使用して完璧なワークフローを開発する準備が整います。 コーディングを続けてください!