New Rice Growth

新米SESエンジニア日々の成長日記

Githubの二要素認証を設定したらgit pushがエラーになるのでSSH接続設定する

二要素認証とは

異なる2つの要素で認証を行うことによってセキュリティの強化を図る手法のこと
「認証の三要素」と言われる下記の3つの要素から2つの要素を組み合わせる - 認証の三要素 - 知識(本人が知っていること:暗証番号、パスワード) - 所有(本人が持っているもの:キャッシュカード、スマホ) - 生態(本人の特徴:指紋、顔、静脈)

二要素認証の設定を行うことで、パスワードが盗まれてもアカウントの不正利用を防止することができる

Gitの二要素認証の設定自体はめちゃ簡単にできる

Gitの接続方式をSSHに変更する必要がある

Gitの二要素認証設定を行うと、git pushができなくなる事象が発生する
こんな感じ

$ git push
git@github.com: Permission denied (publickey).
fatal: Could not read from remote repository.

Please make sure you have the correct access rights
and the repository exists.

デフォルトではhttpsを用いた接続でリポジトリとのやりとりを行うような設定になっているが、この接続方式をSSHに変更することで正常にgit pushすることができる

SSH接続できるようにする(本題)

本題はlinux環境で行っています。

SSH認証の公開鍵と秘密鍵を作成する

ssh-keygenコマンドで鍵を生成する
メールアドレスはGitHubのメールアドレスを指定するのが一般的

$ cd ~/.ssh
$ ssh-keygen -t ed25519 -C test@hoge.com //自分のメールアドレス
Enter passphrase (empty for no passphrase):
Enter same passphrase again:
Your identification has been saved in /root/.ssh/id_ed25519.
Your public key has been saved in /root/.ssh/id_ed25519.pub.
The key fingerprint is:
SHA256:A8NkbBxnD63KEoupkrsdAQ8fErexXRaIC2jKpmQ7Xhg test@hoge.com
The key's randomart image is:
+--[ED25519 256]--+
|o o. +Bo+.       |
|o+.=.*+o o.      |
|B.+...+  ..      |
|.E...  o.        |
|= Bo + .S        |
|.+ooo o  .       |
|.o+  .           |
|+o .             |
|+o.              |
+----[SHA256]-----+

オプション
-t : 作成する鍵の暗号化方式を「rsa」「dsa」「ecdsa」「ed25519」から指定する
-C : コメントを指定する(デフォルトは「ユーザ名@ホスト名」)

このコマンドを打つとデフォルトのファイル場所をどこにするか、とパスフレーズを聞かれるの任意入力する

これによって鍵ができる
id_ed25519 : 秘密鍵
id_ed25519.pub : 公開鍵

クライアントへのSSHキーの設定

キーを管理するために新しいSSHキーをssh-agentに追加する

$ eval "$(ssh-agent -s)"
Agent pid 23

SSHプライベートキーをssh-agentに追加する

$ ssh-add ~/.ssh/id_ed25519

リモートURLをHTTPSからSSHへ切り替える

ワーキングディレクトリをローカルプロジェクトに変更し、 変更したいリモートの名前を取得するため既存のリモート一覧を表示する

$ cd your_local_project
$ git remote -v
origin  https://github.com/USERNAME/REPOSITORY.git (fetch)
origin  https://github.com/USERNAME/REPOSITORY.git (push)

git remote set-urlコマンドでリモートの URL を HTTPS から SSH に変更する
USERNAMEとREPOSITORYは自分の環境によって書き換える

$ git remote set-url origin git@github.com:USERNAME/REPOSITORY.git

変更できたか確認する

$ git remote -v
origin  git@github.com:USERNAME/REPOSITORY.git (fetch)
origin  git@github.com:USERNAME/REPOSITORY.git (push)

GitHubへの公開鍵の登録

ssh公開鍵をクリップボードにコピーする

$ sudo apt-get install xclip
$ xclip -selection clipboard < ~/.ssh/id_ed25519.pub

※うまくコピーできてない時はエディタで~/.ssh/id_ed25519.pubを開いて中身をコピーする

下記の1〜6はGitHubサイト上で行う

  1. GitHubの任意のページでプロフィール画像をクリックし、Settings(設定)をクリック
  2. ユーザ設定サイドバーでSSH and GPG keys(SSHおよびGPGキー)をクリック
  3. New SSH key, Add SSH keyをクリック
  4. titleに新しいキーを説明するラベルを追加
  5. キーをKeyフィールドに貼り付ける
  6. Add SSH keyをクリック

SSH接続テスト

$ ssh -T git@github.com
Warning: Permanently added the RSA host key for IP address '52.69.186.44' to the list of known hosts.
Hi USERNAME! You've successfully authenticated, but GitHub does not provide shell access.

You've seccessfully authenticatedをみるにいけたっぽい

git pushしてみる

$ git push
Enumerating objects: 3, done.
Counting objects: 100% (3/3), done.
Delta compression using up to 2 threads
Compressing objects: 100% (2/2), done.
Writing objects: 100% (3/3), 283 bytes | 94.00 KiB/s, done.
Total 3 (delta 0), reused 0 (delta 0)
To github.com:USERNAME/REPOSITORY.git
 * [new branch]      master -> master

無事git push完了