[GitHub活用メモ] Githubの認証をSSH接続方式にしてみる


2021/02/16

去年の暮れに
GitHub公式ブログ(Token authentication requirements for Git operations)のアナウンスで、今年2021年8月13日以降はセキュリティーの面から一切のパスワードを使った認証によるgit操作を廃止するそうです。

よって、Https接続の場合にはトークン認証か、SSH接続の場合にはキー認証のどちらかを使ってgithubにアクセスするということになります。

パスワードを用いた一切のgithub上のレポジトリアクセスができなくなるので、一部のパスワードを直接送信していたgit操作のコマンドやデスクトップアプリなどに影響があるようですが、日常的にhttps/ssh接続で作業してこられた方には影響はないものと思います。

とはいえ、Githubでも2段階ファクター認証などをメールなどで催促されるなど、昨今ではセキュリティー強化の流れもありますので、弊社のアカウントでSSH接続させて利用する方法を試したときのメモをこの記事として残しておこうと思います。


GithubによるSSH接続

では早速SSH接続からGithubアカウントを利用するための手順を見ていきます。

ed25519暗号のSSHキーを生成する

sshの暗号方式で、もっともメジャーなのがrsaの4096bit設定で、他の技術サイトもよく見かける設定ですが、Githubではもっと堅牢なed25519という方式が利用できるようです。

ということで今回はed25519方式で公開鍵と秘密鍵のペアを生成してみます。

生成コマンドを実行すると、
鍵の名前 > パスフレーズ > パスフレーズ(確認)の順に質問を3つ入力するのですが、何も入力せずにEnterを押してもデフォルト値のid_ed25519.pub(公開鍵)とid_ed25519(秘密鍵)が作成されます。

鍵が複数必要な場合には、鍵の名前を与えずに生成の操作を繰り返すと、直前に生成していたid_ed25519という名前の秘密鍵が上書きされてしましますので、適当な名前を付けて生成する必要があります。

            
            #👇-Cオプションでコメントが付けられます
$ ssh-keygen -t ed25519 -C 'tacoskingdom'
Generating public/private ed25519 key pair.
Enter file in which to save the key (/home/*******/.ssh/id_ed25519):
Enter passphrase (empty for no passphrase):
Enter same passphrase again:
Your identification has been saved in /home/*******/.ssh/id_ed25519.
Your public key has been saved in /home/*******/.ssh/id_ed25519.pub.
The key fingerprint is:
SHA256:******************************************* tacoskingdom
The key's randomart image is:
+--[ED25519 256]--+
#以下略
        

Githubに公開鍵を設定する

さて、生成した公開鍵と秘密鍵のペアでssh接続することができるのですが、公開鍵の方がGitHubのサイトに設定する用のファイルです。

そして秘密鍵の方を自分や秘密を保持させたいチームの内部で利用する流れになります。当然GitHubにアクセスするときに、この秘密鍵をもっていないとアクセス出来ませんので、失くさないように管理することも必要です。

ではこの公開鍵(id_ed25519.pub)をGithubに設定します。

さきほど生成した公開鍵の中身をcatで確認します。

            
            $ cat ~/.ssh/id_ed25519.pub
ssh-ed25519 A***********************************************************h tacoskingdom
        
なんだかズラズラーっと表示されている中程の文字が公開鍵の中身だと思われます。

これを以下の図のように、Gitgubページのアイコンから
[Settings] > [SSH and GPG keys] > [New SSH key] > Key値の設定 > [Add SSH key]の順で設定します。

合同会社タコスキングダム|蛸壺の技術ブログ

これで
[Add SSH key]のボタンを押すと公開鍵が設定されます。

ではこの公開鍵
id_ed25519.pubという鍵穴をGithubに設定したので、手持ちの秘密鍵id_ed25519でロック解除できるか以下のコマンドでトライしてみます。

            
            $ ssh -T git@github.com
The authenticity of host 'github.com (xx.xxxx.xx.xx)' can't be established.
RSA key fingerprint is SHA256:n***********************************8.
Are you sure you want to continue connecting (yes/no)? yes
Warning: Permanently added 'github.com,xx.xxxx.xx.xx' (RSA) to the list of known hosts.
Hi tacoskingdom! You've successfully authenticated, but GitHub does not provide shell access.
        
ということで、どうやらGithub側にSSH接続が成功したようです。

複数のSSHキーを管理するときの注意点

なお、複数のSSHキーがローカルに存在していた場合、システムはデフォルトでどの鍵を使えばいいのか分からないので、使う鍵を教えてあげないと利用できません。

ということで
~/.ssh/configという設定ファイルを作成し、特定のホストにどの鍵を割り当てればいいのかを記述してあげる必要があります。

            
            $ nano ~/.ssh/config
#👇ホストがgithub.comの場合
Host github.com
  HostName github.com
  User git
  IdentityFile "~/.ssh/id_ed25519"
        
複数のGithubアカウントでSSHキーを割り当てて管理する場合の設定の書き方はこちらのサイトで紹介されておりますのでご参考ください。

簡単なgit操作

後はもうここまで設定できたらいつものgit操作でレポジトリにアクセス可能です。

あとは何か新しいレポジトリのプロジェクトを作成したときに現れる以下のような手順をヒントに作業を進めていくと良いでしょう。

合同会社タコスキングダム|蛸壺の技術ブログ


まとめ

今回はGithubレポジトリにed25519方式のSSH接続を試す方法をやってみました。

普段Githubを使う分にはhttpsからのトークン認証(github公式ではこちらを推奨)からの操作のほうが楽ではあるのですが、カンパニーアカウントなどのより堅牢な運用が求められる場合には、SSH接続の利用は検討に値すると思います。

参考サイト

最強であろうed25519でSSH鍵を作成してGithubに登録する

記事を書いた人

記事の担当:taconocat

ナンデモ系エンジニア

主にAngularでフロントエンド開発することが多いです。 開発環境はLinuxメインで進めているので、シェルコマンドも多用しております。 コツコツとプログラミングするのが好きな人間です。