- Published on
SSH認証でGithubを使用する(windows)
- Authors
- Name
Windows 10でSSHキーを生成してGitHubに登録する方法
前提条件
- Windows 10がインストールされている
- PowerShellが利用可能
- Gitがインストール済み
HTTPS認証よりセキュリティ向上が見込める。そしてパスワード入力が不要のため、パスワードを思い出す手間が省け効率的なアクセスが可能になる。
手順
SSHキーの生成
PowerShellを開き、以下のコマンドを実行してSSHキーを生成する。
ssh-keygen -t ed25519 -C "xxx@gmail.com"
-t ed25519
はEd25519アルゴリズムを指定。-C "xxx@gmail.com"
にはメールアドレスを記入する。
以下のように表示される。
Generating public/private ed25519 key pair. Enter passphrase (empty for no passphrase): (パスフレーズを入力、もしくは空のままEnter) Enter same passphrase again: (再度同じパスフレーズを入力) Your public key has been saved in C:\Users\user/.ssh/id_ed25519.pub
秘密鍵は、
ssh-keygen
コマンドを実行したときに自動的に生成される。このプロセスの中で、秘密鍵と公開鍵のペアが作成され、それぞれ以下のように保存される:- 秘密鍵: デフォルトでは
C:\Users\user\.ssh\id_ed25519
に保存される(拡張子なしのファイル)。 - 公開鍵: デフォルトでは
C:\Users\user\.ssh\id_ed25519.pub
に保存される。
ssh-keygen
を実行するとき、ファイルを保存する場所やファイル名を指定しない限り、デフォルトのディレクトリに鍵ペアが作成される。この秘密鍵ファイルは、GitHubなどに接続する際にのみ利用し、外部には公開しない。公開鍵をクリップボードにコピー
以下のコマンドで公開鍵をクリップボードにコピーする。
Get-Content C:\Users\user\.ssh\id_ed25519.pub | clip
GitHubにSSHキーを登録
GitHubにログインし、以下の手順でSSHキーを登録する。
- GitHubの「Settings」から「SSH and GPG keys」を選択し、「New SSH key」をクリック。
- 「Key」フォームにクリップボードの公開鍵を貼り付け、「Add SSH key」をクリック。既存のキーがあれば削除も可能。
SSH接続の確認
PowerShellで以下のコマンドを実行し、GitHubへのSSH接続をテストする。
ssh -T github.com
成功すると、以下のようなメッセージが表示される。
Hi <Username>! You've successfully authenticated, but GitHub does not provide shell access.
このメッセージが表示されれば、SSH認証の設定は完了。
SSHキーによる認証の仕組み
SSHキーを使った認証は、公開鍵暗号方式を利用しており、以下のように動作する。
- 秘密鍵: ユーザーが保持し、GitHubなどのサービスに接続する際に使う。外部には公開しない。
- 公開鍵: GitHubに登録するもので、秘密鍵がないと利用できないため、公開しても安全である。
認証の流れ
- ユーザーがGitHubに接続を試みると、GitHubは公開鍵に基づいた「チャレンジ」をユーザーに送る。
- ユーザーのマシン上で秘密鍵を使ってこのチャレンジに応答する。
- GitHubは応答を確認し、正しい秘密鍵がある場合にのみアクセスを許可する。
この仕組みにより、秘密鍵を持つユーザーだけが安全にGitHubにアクセスできる。
SSH認証設定後のGit操作ユースケース
SSH認証を設定すると、GitHub上のリポジトリへのアクセスが簡単かつ安全に行える。以下は、よく使うユースケースである。
リポジトリのクローン作成
- リポジトリを自分のPCにコピーする。
git clone git@github.com:username/repository.git
コードのプッシュ
- 自分の変更をリモートリポジトリに反映する。
git add . git commit -m "変更内容" git push
プルリクエストの確認
- 他のメンバーのプルリクエストをローカルに取り込んで動作確認ができる。
git fetch origin pull/ID/head:ブランチ名 git checkout ブランチ名
リモートの変更をプル
- リモートリポジトリの最新の変更を自分のローカルに取得する。
git pull
これらの操作がSSHキーの認証によりパスワードなしで行えるため、スムーズに開発作業が進められる。