2FAを有効にするとGit認証が失敗する


97

私は2FAを有効にしただけで(私が行った他の変更は考えられません)、gitがユーザー名とパスワードを要求しました。私は両方を提供しましたが、「誤り」でした。私はここでソリューションの多くを試しました:Gitプッシュにはユーザー名とパスワード必要ですが、それは機能しませんでした。特に、httpsからsshに切り替える場合、sshキーは

権限が拒否されました(公開鍵)。致命的:リモートリポジトリから読み取れませんでした。

$ git push
warning: push.default is unset; its implicit value is changing in
Git 2.0 from 'matching' to 'simple'. To squelch this message
and maintain the current behavior after the default changes, use:

  git config --global push.default matching

To squelch this message and adopt the new behavior now, use:

  git config --global push.default simple

See 'git help config' and search for 'push.default' for further information.
(the 'simple' mode was introduced in Git 1.7.11. Use the similar mode
'current' instead of 'simple' if you sometimes use older versions of Git)

Username for 'https://github.com': **********
Password for 'https://mlbileschi@github.com': 
remote: Invalid username or password.
fatal: Authentication failed for 'https://github.com/mlbileschi/scala.git/'

任意のヒント?


1
「権限が拒否されました(公開鍵)。致命的:リモートリポジトリから読み取れませんでした。」:アカウントのSSHキーを設定することによって解決することができる別の問題であるhelp.github.com/articles/...
Ajedi32

1
多くの場合、これは
2FAの

回答:


125

アクセストークンを生成する必要があります。設定ページに移動して作成できます

ここに画像の説明を入力してください

このアクセストークンをコマンドラインのパスワードとして使用します。


うーん、set-urlをhttpsにした後で試してみましたが、うまくいきませんでした。また、set-urlをsshに戻して.ssh / known_hostsエントリを削除しようとしましたが、役に立ちませんでした。
Max Bileschi 2014

質問にコマンドライン出力を追加できますか?実行中のコマンドを含みます。
Gergo Erdosi 14

出力が追加されました
Max Bileschi

クローンを開始して新しいアクセストークンを入力しなければならないという奇妙な問題がありました。この後(クローンの終了を待たずに)、実行しようとした元のディレクトリに新しいアクセストークンを与えることができgit pullました。おそらくローカルの問題ですが、これは誰かを助けるかもしれません。
sg 2015

私が取得The requested URL returned error: 403私はHTTPS経由でプッシュするために、パスワードのトークンを使用する場合
ステリオス

37

エンドツーエンドのソリューションには3つのステップがあります。

  1. Gergo Erdosiへの称賛。彼の答えはほぼ正しい、Githubがその設定ページを変更するだけです。2016年後半以降、個人用アクセストークンページからアクセストークン生成する必要があります

    ここに画像の説明を入力してください

    このアクセストークンをコマンドラインのパスワードとして使用します。

  2. ユーザー名をプロジェクトのリモートURLに含めることで、ユーザー名を永続化できます。これを行う方法の1つは、行を次の形式.git/configに変更するようにを編集することurlです。

    url = https://YOUR_USERNAME_HERE@github.com/owner/repo.git

  3. これを1回だけ実行することにより、パスワードを保持できます。

    $ git config credential.helper store

    その後、将来のgitパスワードは〜/ .git-credentialsにプレーンテキストで、形式を使用して保存されますhttps://user:PlaintextPassword@example.com

    パスワードをプレーンテキストで保存することは、通常、セキュリティ上のリスクと見なされます。ただし、この2FAの場合、資格情報は実際のパスワードではなく、ランダムに生成された文字列です。したがって、ssh秘密鍵をパスフレーズなしのssh秘密鍵を使用するのと同じくらい安全です。警告:このマシンで2FAのない別のgitアカウントも使用した場合、それらの実際のパスワードもプレーンテキストで保存されることに注意してください。

PS:または、パスフレーズで保護されたssh秘密鍵を使用してsshベースのログインを使用することもできます。これは、より安全で便利ではありませんが、この回答の範囲外です。


1
これは私にとってはうまくいき、gitとやり取りするたびにunとpwを入力する必要がなくなりました。私はcygwinでWindowsを使用しており、SSHキーを機能させることができませんでした-これは機能します!
liltitus27

最後のパラについて:...the credential is NOT your real password, it is a randomly generated string. So it is as secure as using ssh private key.それはまったく真実ではありません。SSHキーは、そのままの状態でパスフレーズによって簡単に保護できます。プレーン~./git-credentials—まったく保護されていません!
maxkoryukov

さらに、プレーンテキストファイルに保存されたこのAPI KEYにより、GitHub APIにアクセスでき(スコープによって異なりますが、apikeyを持っているすべての人がリポジトリのソースコードにアクセスできます)、任意の git操作(プッシュ、プル)を実行できます。言い換えると、このようなプレーンテキストファイルは、特にプライベートリポジトリにアクセスできる場合(おそらく、すぐに一般公開されるでしょう)には素晴らしい贈り物です
maxkoryukov

@maxkoryukov OK、最後の文を「パスフレーズなしのssh秘密鍵を使用するのと同じくらい安全」と言い換えてみませんか?ステップ3の全体のポイントは、パスワードのプロンプトをバイパスしようとしているためです(もちろん、自分のコンピューターで作業していると仮定します)。そのような場合、誰かがなんとかして〜/ .git-credentialsまたはパスフレーズのないssh秘密鍵を取得しても、結果は同じです。パスフレーズで保護されたsshキーの方が安全である(そして便利ではない)ことには同意します。
RayLuo 2017

@ RayLuo、LGFM;)
maxkoryukov

16

同様の問題がありました。ユーザー名を含めるために、gitコマンドで使用されるURLを変更する必要がありました。

git push https://YOUR_USERNAME_HERE@github.com/mlbileschi/scala.git

次に、PWを要求するときに、Gergo Erdosiの回答の指示に従って作成したアクセストークンを使用します。


1
これは私にとってはうまくいきgit remote set-url --push originますが、同じ値を設定しようとしてgit push origin masterも失敗します。
Danimal

Jesterによって説明されているように、リモートパスに自分のユーザー名を含めた後も機能します。
ovo 2015年

これはWindowsコマンドプロンプトでは機能しませんでしたが、内部git-bashは問題なく動作しました
Vincent Tang

Ubuntuで私のために完全に働いた。ありがとう!
Ryan Russell

12

Linuxでは、SSHキーを使用してGitHub IDを認証できます。

1)新しいSSHキー(ソース)の生成

端末を開きます。

以下のテキストを貼り付けて、GitHubのメールアドレスに置き換えます。

ssh-keygen -t rsa -b 4096 -C "your_email@example.com"

これにより、提供された電子メールをラベルとして使用して、新しいsshキーが作成されます。


2)キーをGitHubアカウントにリンクする

ターミナルを開き、生成された公開鍵をコピーします

cat ~/.ssh/id_rsa.pub

次のものとして出力する必要があります

ssh-rsa AAAAB3NzaC1y ... mKAKw== your_email@example.com

移動https://github.com/settings/keysをクリックしNew SSH Key、それにタイトルを付けると公開鍵をコピー&ペーストします。

ここに画像の説明を入力してください


3)git originをからhttps://に変更しますssh

ターミナルを開きcd、リポジトリの場所に移動して入力します

git remote set-url origin git@github.com:<github username>/<repository name>

1
本当ですが、質問とは無関係です。認証されたビアはhttps、上流オーバーを維持するときなど、便利時々あるhttps上にフォークを持ちながらsshするので、あなたが誤って上流へプッシュ避けるようにすることを、httpsあなたは間違ってレポを対象としたパスワードを要求して、あなたを思い出させます
ステリオスは

SSHを使用するのにLinuxは必要ありません。WindowsでもSSHを使用する方が良いと思います。Windowsでよく使用されるツールは、PagaentとPuttyです
Andrew

3

これは私のために働きました:

  • [your-git-repo] /。git / configに移動します

  • 下の[remote "origin"]変更URLはgitへのHTTPプロトコルからキー。

の値urlhttps://github.com/ .gitの場合は、次のように変更しますgit@github.com:<repo-url>.git


3

すでにsshキーを使用している場合、2FAを有効にすると、SSHを使用してリモートで読み取り/書き込みが強制されます。個人のトークンを追加する必要はなく、既存のSSHキーペアを使い続ける必要があります。

リモートURLをHTTPSからSSHに変更するだけです。

git remote set-url origin git@github.com:<github-username>/<repo-name>

0

これは、Githubで2FAを有効にした後、私にとってはうまくいきました:

  1. パーソナルアクセストークンを作成します:https : //help.github.com/en/github/authenticating-to-github/creating-a-personal-access-token-for-the-command-line
    注:トークンの正しい権限を選択することを忘れないでください。

  2. 実行:
    git clone https://github.com/username/repo.git
    ユーザー名:your_username
    パスワード:your_token

さらに読む:https : //help.github.com/en/github/using-git/which-remote-url-should-i-use


0

私のプライベートリポジトリの1つで2FA(2要素認証)を有効にすると、既存のリポジトリでこの問題に直面していました。私はubuntu 19.0端末で以下の手順に従ってそれを解決することができました:-

  1. sshキーをgithubに追加すると、2FAが有効になり、パスワードを再度使用する必要がなくなります。githubページアクセスして、簡単に行う方法を確認してください
  2. キーが追加されたら、ターミナルに移動し、オリジンのURLを更新します

    git remote set-url origin git@github.com:<USERNAME>/<BRANCH-NAME>

それで終わりです。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.