【GitHub】HTTPS認証からSSH認証に切り替えた話
こんにちは、コル(@bravecol)です。
前回Githubのパスワード認証のサポートが終了したことを知り、HTTPS認証に切り替えました。

対応したのは良いのですが正直な話、、、

たびたび認証期限切れて毎回更新するの面倒くさい!!
となってしまい、SSH認証に切り替えましたので今回はその手順を記しておきます。
実現したいこと
Githubを用いたGit操作をSSH認証で行いたい。今回はこちらを実現します。
手順としてはGihhub公式の「新しい SSH キーを生成して ssh-agent に追加する」に沿って対応していきます。
実際の手順
それでは実施していきます。
新規で SSH キーを生成する
まずローカルPCでSSHキーを生成します。Git Bashを開き下記を入力します。
ssh-keygen -t ed25519 -C "Githubアカウントのメールアドレス"
一応簡単にコマンド解説載せておきます。
- ssh-keygen:SSHの鍵ペア(公開鍵と秘密鍵)を生成するコマンド。
- -t ed25519:鍵の種類を指定するオプション。
(今回はed25519を指定。高セキュリティかつ高速な暗号方式) - -C:コメント(通常はメールアドレスや用途など)を付与するオプション。
(-Cの後にコメント文字列を記述することで、キーの識別がしやすくなる)
上記により、ed25519方式の公開鍵と秘密鍵のファイルが作成されます。
下記が実行結果です。数回聞かれますが基本Enterで大丈夫です。
4,5行目のpassphraseのところはセキュリティ強化をしたければ入力する方が良いと思います。
$ ssh-keygen -t ed25519 -C "sample@techtekulife.jp"
Generating public/private ed25519 key pair.
Enter file in which to save the key (/c/Users/{ユーザー名}/.ssh/id_ed25519):
Enter passphrase (empty for no passphrase):
Enter same passphrase again:
Your identification has been saved in /c/Users/{ユーザー名}/.ssh/id_ed25519
Your public key has been saved in /c/Users/{ユーザー名}/.ssh/id_ed25519.pub
The key fingerprint is:
(省略)
The key's randomart image is:
(省略)
実行時の「Enter file in which to save the key」で指定したフォルダを開くと下記のように生成されています。(この例では/c/Users/{ユーザー名}/.ssh)

これで公開鍵(例: id_ed25519.pub)と秘密鍵(例: id_ed25519)の2つのファイルが出来上がりました。
公開鍵はサーバーに登録(今回の場合はGithub)します。
秘密鍵はローカルPCに保管し他人に知られないようにしましょう。
ssh-agentに生成したSSHキーを登録する
管理者権限でPowerShellを開き、下記コマンドを入力します。先ほど生成した秘密鍵を指定します。
ssh-add C:/Users/{ユーザー名}/.ssh/id_ed25519
正常にいけば下記の通りの実行結果になります。
> ssh-add C:/Users/{ユーザー名}/.ssh/id_ed25519
Enter passphrase for C:/Users/{ユーザー名}/.ssh/id_ed25519:
Identity added: C:/Users/{ユーザー名}/.ssh/id_ed25519 (sample@techtekulife.jp)
僕はローカルマシンにアカウントが複数あり、一回目は下記のように思いっきり怒られました。。。
秘密鍵はその他のすべてのユーザーの読み取りおよび書き込み操作から保護されている必要があるそうで、権限的に良くないから無視されていました。アカウントの権限周りを見直すと無事通るようになりました。
Bad permissions. Try removing permissions for user: (中略) on file C:/Users/{ユーザー名}/.ssh/id_ed25519.
@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
@ WARNING: UNPROTECTED PRIVATE KEY FILE! @
@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
Permissions for 'C:/Users/{ユーザー名}/.ssh/id_ed25519' are too open.
It is required that your private key files are NOT accessible by others.
This private key will be ignored.
Githubに公開鍵を追加する
あとはGithubに生成した公開鍵を追加するだけです。
公式の「GitHub アカウントへの新しい SSH キーの追加」の手順になります。
まず公開鍵の内容をクリップボードにコピーしておきます。
clip < ~/.ssh/id_ed25519.pub
無事コピー出来たら下記の手順でGithubのSSHキー登録ページを開きます。
- Githubのプロフィールページに遷移
- 「SSH and GPG keys」のメニューをクリック
- 「New SSH Key」ボタンをクリック
- 下記画面の「Key」欄に先ほど生成した公開鍵の内容を貼り付け
(Titleは自分が分かりやすいものを記載、Key Typeはそのままで大丈夫です) - 「Add SSH Key」ボタンをクリック

以上でGithubに公開鍵が登録できました。
SSH認証によるGit操作検証
では無事Git操作できるようになっているのか検証してみます。
SSHでcloneするためのURLをコピーします。
Githubのリポジトリの「Code」から「SSH」タブの下記記載のURLをコピーします。

では、Githubの自分がアクセス可能なリポジトリを指定していざ!!
git clone git@github.com:{username}/{repositoryName}.git
> git clone git@github.com:username/repositoryName.git
Cloning into 'repositoryName'...
Enter passphrase for key '/c/Users/{ユーザー名}/.ssh/id_ed25519':
remote: Enumerating objects: 3550, done.
remote: Counting objects: 100% (351/351), done.
remote: Compressing objects: 100% (77/77), done.
remote: Total 3550 (delta 311), reused 293 (delta 274), pack-reused 3199 (from 2)
Receiving objects: 100% (3550/3550), 43.22 MiB | 3.18 MiB/s, done.
Resolving deltas: 100% (2798/2798), done.
キター、これでGithubのSSH認証完成です。
まとめ
以上、GithubのSSH認証対応例の一つを実施しました。
今までHTTPS認証でトークンの有効期限切れに悩まされていたけど、もう悩まなくて済みます。うれしす^^
今回はコマンドでのSSH認証でしたが実際の開発ではSourceTree, TortoiseGitとか使用する方が多いと思うのでそちらのSSH認証のやり方もまた今度記事にしてみます。
同じことでお困りの方の助けになれば幸いです。ご一読ありがとうございました。