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-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への公開鍵の登録
$ sudo apt-get install xclip $ xclip -selection clipboard < ~/.ssh/id_ed25519.pub
※うまくコピーできてない時はエディタで~/.ssh/id_ed25519.pub
を開いて中身をコピーする
下記の1〜6はGitHubサイト上で行う
- GitHubの任意のページでプロフィール画像をクリックし、Settings(設定)をクリック
- ユーザ設定サイドバーでSSH and GPG keys(SSHおよびGPGキー)をクリック
- New SSH key, Add SSH keyをクリック
- titleに新しいキーを説明するラベルを追加
- キーをKeyフィールドに貼り付ける
- 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
完了