0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

git push で認証エラーになったのでSSHキーを設定して解決した

0
Posted at

この記事の内容

新しいPC(MacBook Air)でGitHubにgit pushしようしたところ、下記の認証エラーでpushできませんでした。
本記事では、何が起こっていたのか、解決するために行ったSSHキーの設定とリポジトリURLの切り替え方法をまとめます。

hoge@hogehoge % git push -u origin main
Username for 'https://github.com': hogehoge
Password for 'https://hogehoge@github.com': 
remote: Invalid username or token. Password authentication is not supported for Git operations. fatal: Authentication failed for 'https://github.com/hogehoge/hogehoge.git/'

何が起こっていたのか

今回のエラーの要因は大きく2つです。

  • GitHubはGit操作における「パスワード認証」を廃止している。(HTTPSでパスワードを入れても通らない)
    にも関わらず、パスワードを使ってpushしようとした
  • リポジトリへのアクセス先(remote URL)がHTTPSのままだった(SSHで認証したいならSSHのURLにする必要がある)

一つずつ見ていきます。

GitHubがパスワードを使ったアップロードを禁止している

git pushした際にUsernameとPasswordの入力を求められましたが、GitHubはGit操作における「パスワード認証」を廃止しています。そのためパスワードを入力しても認証に失敗します。

HTTPSでpushする場合は「パスワード」ではなく Personal Access Token(PAT) が必要ですが、今回は SSH に切り替えて解決しました。

リポジトリへのアクセス先がHTTPSになっていた

後述の方法SSHキーを作っても、リポジトリの remote URL が https://github.com/... のまま(HTTPS)だと、push 時に HTTPS で接続してしまい、再び Username/Password を聞かれます。
SSHキーで認証したい場合は remote URL を git@github.com:... の形式(SSH)に変更する必要があります。

解決手順

やったことは下記の2つです。

  • SSHキーを作成してGitHubに登録する
  • リポジトリへのアクセスをSSH経由にする(remote URLを変更)

SSHキーを作成してGitHubに登録する

SSHキーの作成

SSHキーの作成は下記のコマンドでできます。

ssh-keygen -t ed25519
  • ssh-keygen: SSH鍵を作る標準ツール(macOS/Linuxに標準で入っていることが多い)
  • -t ed25519: 作る鍵の種類(type)を ed25519 にする。 ed25519は安全で最近推奨されているタイプらしい。

上記のコマンドを実行すると ~/.sshに公開鍵と秘密鍵が生成される。
パスフレーズは設定しないでEnter押してもOK。

hoge@hogehoge ~ % ssh-keygen -t ed25519
Generating public/private ed25519 key pair.
Enter file in which to save the key (/Users/hogehoge/.ssh/id_ed25519): 
Created directory '/Users/hogehoge/.ssh'.
Enter passphrase for "/Users/hogehoge/.ssh/id_ed25519" (empty for no passphrase): 
Enter same passphrase again: 
Your identification has been saved in /Users/hogehoge/.ssh/id_ed25519
Your public key has been saved in /Users/hogehoge/.ssh/id_ed25519.pub
The key fingerprint is:
SHA256:cm9gPQcEq42jyVcUbA2EWQSbFnpH42XHbAt/CVcchqg
The key's randomart image is:
+--[ED25519 256]--+
|      oOX++oo .=o|
|     .o*oBoo=.o .|
|    . =.= o+ + . |
|     o * E .o o  |
|      = S o ..   |
|   . o * o o     |
|    + .   o      |
|     .   .       |
|                 |
+----[SHA256]-----+
hoge@hogehoge ~ % ls ~/.ssh
id_ed25519	id_ed25519.pub	known_hosts	known_hosts.old
  • id_ed25519: 秘密鍵。(絶対に共有しない)
  • id_ed25519.pub: 公開鍵(GitHubに登録する)

ssh-agentにキーを追加する

鍵が1つで、かつパスフレーズ無しなら必須ではありません。
ただし、パスフレーズを付けて毎回入力したくない場合や、鍵が複数あって使い分けたい場合は設定しておくと楽です。

configファイルを用意

~/.ssh/ にconfigファイルがなければ下記で作成。あればgitの設定を追記する。
これを設定しておくことでキーが ssh-agent に自動的に読み込まれ、パスフレーズがキーチェーンに格納されるようになる。

touch ~/.ssh/config

↓configに追加する設定

Host github.com
  AddKeysToAgent yes
  UseKeychain yes
  IdentityFile ~/.ssh/id_ed25519

SSHキーを追加

下記コマンド実行でSSHキーをssh-agentに追加する。

ssh-add --apple-use-keychain ~/.ssh/id_ed25519

GitHubにSSHキーを登録する

id_ed25519.pubの中身をコピーします。macの場合は下記コマンドでコピーできます。

pbcopy < ~/.ssh/id_ed25519.pub

GitHubのページへ行き、Settings → SSH and GPG keys → New SSH keyで鍵をペーストし登録します。

ターミナルで下記を実行して成功っぽいものが出ればsshでの接続ができています。

hoge@hogehoge % ssh -T git@github.com

Hi hogehoge! You've successfully authenticated, but GitHub does not provide shell access.

リポジトリへのアクセスをSSH経由にする

まず、下記で接続先を確認します。

git remote -v

https://github.com/... から始まっている場合は接続先URLをSSHにする必要があります。下記でできます。

git remote set-url origin git@github.com:hogehoge/hogehoge.git

これで git push 時に Username/Password を聞かれず、SSH鍵で認証されるようになります。

参考

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?