Gitがパスワードを要求し続ける


665

私はしばらくの間Gitを使用していますが、パスワードを何度も要求することで壁にぶつかり始めています。

Mac OS XとGitHubを使用していて、GitHubの[ Gitセットアップ]ページの指示に従って、GitとSSHキーをセットアップしました

GitHubのSSHキーのパスフレーズのページで説明されいるように、Mac OS Xキーチェーンにgithub SSHキーも追加しました。私の公開鍵はGitに登録されています。

それにもかかわらず、Gitをプルしようとするたびに、ユーザー名とパスワードを入力する必要があります。このために設定する必要があるSSHキー以外のものはありますか?


1
ばかげた質問ですが、gitを使用してマシンにsshを使用するだけでSSHキーが機能することを確認しましたか?
カート・スタッツマン、2011年

4
ssh -T git@github.comのようなものですか?ええ、それはうまく動作します(少し遅い場合)。
キャサリン


https urlの場合は、(git1.8.3以降で)git資格情報ヘルパー ' netrc' を使用できます。ここで完全な例を参照してください。
VonC 2013

私はWindowsユーザーで、サーバーのauthorized_keysファイルに公開鍵を追加した後でも、パスワード要求の問題に直面していました。本当に問題なのは、私がc / \ program files \ gitフォルダーの.sshフォルダーの下に公開鍵/秘密鍵を保存していないことでした。誰かがこのような問題に直面している場合は、このフォルダにキーをコピーして、プッシュ/プルしてみてください。
Raja Amer Khan

回答:


797

GitリポジトリのURLが間違っている可能性があります。

.git/config[remote "origin"]セクションを開いて見つけます。SSHを使用していることを確認してください:

ssh://git@github.com/username/repo.git

[ クローン ] または [ ダウンロード ]をクリックしてsshを選択すると、リポジトリのメインページにSSH URLが表示されます

AND NOT httpsまたはgit1:

https://github.com/username/repo.git
git://github.com/username/repo.git

ユーザー名とパスワードの代わりにSSHキーだけで検証できるようになりました。

Gitはそれを言っている場合'origin' has already been added、開い.configたファイルと編集url = "..."後の一環[remote origin]としてのurl = ssh://github/username/repo.git


他のサービスについても同様です。アドレスが次のようになっていることを確認します。protocol://something@url

たとえば.git/configAzure DevOpsの場合:

[remote "origin"]
    url = https://mystore@dev.azure.com/mystore/myproject/
    fetch = +refs/heads/*:refs/remotes/origin/*

4
これかもしれません。私はgitのを呼び出すと、リモートIが得る-v:起源 github.com/Foo/Bar.git(フェッチ)起源 github.com/Foo/Bar.git(プッシュ)SSHで動作するように、あるべきと思われるのに対し:原点gitのを@ github.com:Foo / Bar.git(fetch)origin git@github.com:Foo / Bar.git(push)これは、GitHubのMacアプリケーション(mac.github.com)を使用してプロジェクトを最初にチェックアウトしたことが原因である可能性があります。どのように私はそれを修正することができますか?
キャサリン

8
.git / configファイルのURLを修正するか、git-remoteを使用して修正するか、ローカルリポジトリを削除して、正しいURLで再度複製します。
static_rtti 2011年

91
これを詳しく説明するために(必要に応じて):.git / configを開き、[remote "origin"]セクションセットでurl = ssh://git@github.com/username/Repo.git。それでうまくいきました。
Greg K

13
奇妙なことに、@ GregKのソリューションは私にはうまくいきませんでしたが、うまくいきましたurl = git@github.com:organization/Repo.git。+1でも正しい道を案内してくれます。成功!
jmort253 2012年

3
ssh:// git @ github / [username] / [reponame] .gitを使用してクローンを作成することがどれほど重要であるかを十分に強調することはできません。GITにアクセスするためにキーを使用したい場合、毎回ユーザー名とパスワードを入力する必要はありません。私はそれを修正する唯一の方法を見つけましたローカルリポジトリを削除して再度クローンを作成することでした$ git clone ssh:// git @ github / [username] / [reponame] .git
Gene Myers

555

credential.helperの構成

OS X(現在はmacOS)では、これをターミナルで実行します。

git config --global credential.helper osxkeychain

これにより、GitはファイルKeychain.appを使用してユーザー名とパスワードを保存し、キーチェーンから秘密SSHキーへのパスフレーズを取得できます。

Windowsの場合:

git config --global credential.helper wincred

トラブルシューティング

Gitクレデンシャルヘルパーが正しく設定されている場合、macOSはパスフレーズをキーチェーンに保存します。SSHとキーチェーンに保存されているパスフレーズ間接続が切断されることがあります。ssh-add -Kまたはssh-add ~/.ssh/id_rsaを実行して、キーを再度キーチェーンに追加します。

macOS v10.12(Sierra)のsshへの変更

macOS v10.12(Sierra)の場合、ssh-add -K再起動するたびに実行する必要があります。これを回避するには~/.ssh/config、このコンテンツで作成します。

Host *
   AddKeysToAgent yes
   UseKeychain yes
   IdentityFile ~/.ssh/id_rsa

ssh_config man10.12.2 のページから:

UseKeychain

macOSでは、特定のキーを使用するときに、システムがユーザーのキーチェーン内のパスフレーズを検索するかどうかを指定します。ユーザーがパスフレーズを提供する場合、このオプションは、パスフレーズが正しいことが確認された後にキーチェーンに保存するかどうかも指定します。引数は「yes」または「no」でなければなりません。デフォルトは 'no'です。

Appleは、何が起こったかを説明するTechnote 2449を追加しました。

macOS Sierra以前sshは、パスフレーズを要求するダイアログを表示し、それをキーチェーンに保存するオプションを提供していました。このUIはしばらく前に非推奨になり、削除されました。


30
OSX用のGithubアプリケーション(おそらくWindowsも)はデフォルトでgit reposにhttpsパスを使用するため、これはこれを行うための最善の方法です。セキュリティ上の理由から、多くの企業ネットワークではポート80443でのトラフィックしか許可されていないため、ssh / gitではなくhttpsを使用することには十分な理由もあります。
codehugger 2012

2
資格情報ヘルパーを使用するには、git 1.7.10以降が必要です。
jbandi 2012

3
keychain.appソリューションの+1。これは、GREAT私の雇用者のGitのサーバーはApacheのみを経由して提供し、彼らは強く使用して思いとどまらHTTPをサポートしているので、私のために.netrc平文でパスワードを置くファイル方式を。
Josh

3
'credential-osxkeychain' is not a git command.資格情報ヘルパーをインストールしていないため、エラーが発生しました。私はここの指示に従ってインストールしました:help.github.com/articles/set-up-git#password-caching
Hugh

2
Sierraの更新のおかげで、私は更新しましたgit config --global credential.helper osxkeychainが、.sshディレクトリにconfigファイルを追加したときにgithubがpwを要求し続ける理由を理解できませんでした。
ピクセル67

139

これは、macOS v10.12(Sierra)にアップグレードしたときに起こりました。アップグレード時にSSHエージェントがクリアされたようです。

$ ssh-add -L
The agent has no identities.

単に実行ssh-addすると、私の既存のアイデンティティが見つかりました。パスワードを入力しましたが、もう一度行ってよかったです。


9
シエラのアップグレードにより+1が壊れました。パスワードはSSHキーのパスワードであり、Macユーザーのパスワードではないことに注意してください。
mbonness

1
ssh-addを実行しても機能しますが、ターミナルウィンドウを閉じるとリセットされるようです。たぶん、これは新しい「機能」です。
joshd 2016

ヘッドアップ-これは、別のSierraアップデート(10.12.2)で再び起こりましたが、同じ修正が適用されます。
ブライアン

ターミナルが閉じられた後にこれをリセットしない方法を誰かが知っていますか?
nickjwallin 16

1
Macbook Proを10.12.2にアップデートしたところ、Gitが壊れました。ssh-addを使用することで、まったく問題なく動作しました。@amccに感謝!
jimmyplaysdrums 2017年

68

これを使用:github.comを適切なホスト名に置き換えます

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

git remote -vたときは、すでに設定しました。それでも、パスワードの入力を求められます。
IgorGanapolsky 2015

同じように、彼が提案したとおりに設定しましたが、それでもパスワードの入力を求められます。どうすればそれを防ぐことができますか?
cyber8200 2017年

@IgorGanapolsky:あなたのための解決策を見つけたことがありますか?
cyber8200 2017年

1
これは正常に動作します。これは、リモートURLがgit@**クレデンシャルをプロンプトしないことと、URLがhttps@**does :)をプロンプトしないことは奇妙です。したがって、私はこのドキュメントを見つけました。
Sujit Kumar Singh

54

他の人が言ったように、パスワードキャッシュヘルパーをインストールできます。Macだけでなく、他のプラットフォームへのリンクを投稿したいと思っていました。私はLinuxサーバーを実行していますが、これは役に立ちました:GitでのGitHubパスワードのキャッシュ

Mac用:

git credential-osxkeychain

ウィンドウズ:

git config --global credential.helper wincred

Linux:

git config --global credential.helper cache
git config --global credential.helper 'cache --timeout=3600'
# Set the cache to timeout after 1 hour (setting is in seconds)

5
Linuxの説明を表示するには、3番目の回答までスクロールダウンする必要がありました。これは、一般的に参照される問題であるため、これらは主要な回答に含まれるはずです。
KoldBane、2016年

22

また、パスフレーズを求めている人を探します。それはGitまたはSSHエージェントですか?

私の場合、私がgit pullするたびにそれは私に尋ねていました:

Enter passphrase for key '/work/username/.ssh/id_rsa':

ですから、Gitがパスフレーズを要求していると思いました。それで私は解決策を探し続けましたが、後になって私のSSHエージェントがシャットダウンしたことに気づきました。これを使用eval $(ssh-agent)してssh-addここで指定されているように修正できます。

また、あなたがあなたに追加できる小さなスニペットの下に貼り付けています ~/.bashrc、ログイン時にSSHエージェントが確実に開始されるようファイル(または同等のもの)にています。

いずれにせよ、これは私が犯したかなりばかげた間違いでしたが、私がしたように、誰かが間違った木を吠えることから時間を節約するのを助けるために、ここに投稿しました。

# Start the ssh-agent
function start_agent {
    echo "Initializing new SSH agent..."

    # Spawn ssh-agent
    /usr/bin/ssh-agent | sed 's/^echo/#echo/' > ${SSH_ENV}
    echo succeeded
    chmod 600 ${SSH_ENV}
    . ${SSH_ENV} > /dev/null
    /usr/bin/ssh-add
}

if [ -f "${SSH_ENV}" ]; then
     . ${SSH_ENV} > /dev/null
     ps -ef | grep ${SSH_AGENT_PID} | grep ssh-agent$ > /dev/null || {
        start_agent;
    }
else
    start_agent;
fi


かなりあなたは上記のコードの行が欠落している-のとおりstackoverflow.com/a/18915067/277023あなたが持っている必要がありますSSH_ENV="$HOME/.ssh/environment"
kellyfj

20
git config credential.helper store

注:これは便利ですが、Gitはプロジェクトディレクトリの下のローカルファイル(.git-credentials)に資格情報をクリアテキストで保存します(「ホーム」ディレクトリについては下記を参照)。これが気に入らない場合は、このファイルを削除して、キャッシュオプションの使用に切り替えます。

Gitがリモートリポジトリに接続する必要があるたびに資格情報を要求するように再開する場合は、次のコマンドを実行できます。

git config --unset credential.helper

プロジェクトディレクトリではなく%HOME%ディレクトリの.git-credentialsにパスワードを保存するには、-globalフラグを使用します。

git config --global credential.helper store

9

WindowsのGitとSSHを使用してプッシュ/プルするGitHubのガイドWindowsのGitのイラスト入りガイド

  1. PuTTYをダウンロードしてインストールする
  2. 環境変数 'GIT_SSH' = 'path \ to \ plink.exe'(インストールされたパテフォルダー内)を設定- 非常に重要です!!!
  3. エクスプローラを再起動します環境変数を有効にするためにを(コマンドプロンプトを再起動するだけではありません)。
  4. puttygen.exeを実行して新しいキーを生成し、パブリックをコピーしますキーをGitHubサイトにます
  5. この新しい秘密鍵をディスクの安全な場所に保存します(Dropboxではなく推奨)では)
  6. putty.exeを実行し、SSHをgithub.coに接続します。
  7. 「shell:startup」を実行することで、起動フォルダーにすばやく移動します。
  8. Windowsでページェントを使用して秘密鍵を起動します。構文 "path \ to \ pageant.exe" "path \ to \ privatekey"を使用して、スタートアップフォルダーにショートカットを作成します
  9. リポジトリの.git / config内に「puttykeyfile」設定を設定する必要はありません
  10. GitHubの「SSHクローンURL」が使用され、HTTPSが使用されないことが非常に重要です。

誰ももうパテを使うべきではありません。組み込みのWindows 10ユーティリティを使用して、今すぐすべてを行うことができます。パテしましょう、パテにしてください。
Ian Smith

9

Windows for Git 1.7.9以降では、コマンドプロンプトで次のコマンドを実行して、構成ファイルをテキストエディターで開きます。

    git config --global --edit

次に、ファイルに次のブロックがない場合は追加するか、適宜編集します。

    [credential "https://giturl.com"]
        username = <user id>
         helper = wincred

ファイルを保存して閉じます。上記の変更後に一度だけ資格情報を提供する必要があります。


これは完璧に機能し、あなたは私の時間を節約しました、今私は私の仕事に集中することができます、ありがとうブラザー。
Mohammed Sufian

9

次のコマンドを使用してタイムアウト期間を長くし、しばらくパスワードを再入力できるようにします。

git config --global credential.helper 'cache --timeout 3600'

私はそれをBitbucketとGitHubの両方で使用しました。あなたがしなければならない唯一のこと 3600は秒です。好きなだけ増やしてください。259200約30日に変更しました。この方法で、30日ほどごとにパスワードを再入力します。


1
OK、これは再起動後も持続しないことがわかったので、タイムアウトに関係なく、再起動後もパスワードを入力する必要があります...
Ben Winding

これはキャッシュを作成するための良い方法です:)少なくとも私の時間を節約しました。ありがとう
ChikuMiku 2018

@BenWindingは、資格情報をメモリに格納するためです。
z3dd

5

あなたはあなたの問題を修正したと思いますが、私を助ける解決策がここにないので、ここにあります。

端末を入力:

echo "" > ~/.ssh/known_hosts

これによりknown_hostsファイルが空になり、使用して接続したすべてのホストを追加する必要がありますが、問題は解決しました。


1
cat /dev/null > ~/.ssh/known_hosts同じことをします。
Tin Man

5
> ~/.ssh/known_hostsさらに短い:)
Collin Allen

rm〜/ .ssh / known_hostsも同様に機能します。私はこれに対して反対するでしょう。
orkoden 2013年

3
〜/ .ssh / known_hostsからホストを削除する必要がある場合、ファイルを消去するよりも影響の少ない方法があります。〜/ .ssh / known_hostsは単なるテキストファイルであり、ファイル内に問題のあるホストが見つかった場合は、その行を削除できます。編集する前にファイルをバックアップすることをお勧めします。ファイルにいくつかのエントリしかない場合は、完全に消去することは悪い考えではないかもしれません。私は多くのサーバーで作業しているので、〜/ .ssh / known_hostsには何百ものエントリがあり、それらすべてを削除していくつかのエントリを削除する準備ができていません。
Tim Stewart

3
@papanこれはgitがパスワードを要求するのを妨げません!
IgorGanapolsky 2015

5

static_rttiが提供する答えはある意味ハックだと思います。これが以前に利用可能であったかどうかはわかりませんが、Gitツ​​ールが資格情報ストレージを提供するようになりました。

キャッシュモード

$ git config --global credential.helper cache

「キャッシュ」モードを使用して、資格情報を一定期間メモリに保持します。パスワードはディスクに保存されず、15分後にキャッシュから削除されます。

ストアモード

$ git config --global credential.helper 'store --file ~/.my-credentials'

「ストア」モードを使用して、資格情報をディスク上のプレーンテキストファイルに保存します。期限切れになることはありません。

個人的にはストアモードを利用しました。リポジトリを削除して複製し、資格情報を1回入力する必要がありました。

参照:7.14 Gitツール-資格情報ストレージ


Windowsの場合は機能credential.helper cacheしません。あるはずですgit config --global credential.helper wincred
Paulo Merson

それを保存することはうまくいきました、そして今、それは私がいつもパスワードを要求することなく私の変更をコミットすることを可能にします、あなたは命の恩人です!
g4ost

Linuxでは、これでうまくいきましたgit config --local credential.helper store。私の場合、HTTPSを使用しています。このようにして、ユーザー名/パスワードを1回入力するだけで、その後、資格情報は〜/​​ .git-credentialsから再利用されます
CCarlos

3

ターミナルでのGitでのキーチェーンの使用に関するorkodenの回答は不完全で、エラーが発生しました。これは、ターミナルに入力したユーザー名とパスワードをキーチェーンに保存するために必要なことです。

curl http://github-media-downloads.s3.amazonaws.com/osx/git-credential-osxkeychain -o git-credential-osxkeychain
sudo mv git-credential-osxkeychain /usr/local/bin
sudo chmod u+x /usr/local/bin/git-credential-osxkeychain

次に入力してください

git config --global credential.helper osxkeychain

curlの前にGit構成でその部分をすでに実行している場合は、問題ありません。うまくいきます。


1
Linuxを使用している場合はどうなりますか。
IgorGanapolsky 2015

3

static_rttiが上記のように変更します

https://github.com/username/repo.git
git://github.com/username/repo.git

ssh://git@github.com/username/repo.git

私自身httpsも.git / configファイルのをsshに変更しましたが、それでも機能しませんでした。それから私はあなた変えなければならないことを見ましたgithub.comgit@github.com。実際の正しいURLを取得する良い方法は、プロジェクトページに移動してこれをクリックすることです。

HTTPSをSSHに変更して正しいURLを取得する

次に、このURLを構成ファイルに追加します。


私の構成設定ファイルにはすでにそれが含まれていますが、他に何を確認する必要がありますか?
cyber8200 2017年

github.comでも変更しましたか?
CheesusCrust 2017年

3

Linux(WSL)用のWindowsサブシステムでは、これが私が機能することがわかった唯一のソリューションでした。

eval `ssh-agent` ; ssh-add ~/.ssh/id_rsa

ssh-agentがWSLに正しく登録されていないことが問題でした。


愚か者でしたが、これが私の問題を修正したものです。
ナム・キム

3

あなたがしたい場合は、常に求めてからGitリポジトリを停止し、これは簡単に行うことができ、あなたのGitHubリポジトリのログイン資格情報を。

HTTPSの代わりにSSHを使用する

HTTPSの代わりにSSHを使用して元のリモートを更新できます」

git remote set-url origin git@github.com:username/your-repo.git

パスワードとユーザー名を保存するようにGitを構成する

Gitにユーザー名とパスワードを保存させる方法は次のとおりです。

git config --global credential.helper store

次に、セッションのユーザー名とパスワードを保存します。

git config --global credential.helper cache

2

私は「codehugger」に同意し、「orkoden」の指示を使用してそれが私のために働いた-NetBeans 7.3-ファイルを右クリックしてコンテキストメニューを選択すると-プッシュ-「リモートへのプッシュ」ウィンドウが開く-2つあるここにオプション:

  1. origin:https://github.com/myaccount/myproject.git/

  2. https://github.com/myaccount/myproject.git/

ご覧のとおり、違いはURLのoriginパラメータです-このオプション(1)を選択したくない場合(2)を確認したい場合、それは私には問題なく機能します。


2

手順1:現在の構成を確認する

cat .git/config

あなたは得るでしょう:

[core]
    repositoryformatversion = 0
    filemode = true
    bare = false
    logallrefupdates = true
    ignorecase = true
    precomposeunicode = true
[remote "origin"]
    url = https://github.com/path_to_your_git.git
    fetch = +refs/heads/*:refs/remotes/origin/*
[user]
    name = your_username
    email = your_email
[branch "master-staging"]
    remote = origin
    merge = refs/heads/master-staging

ステップ2:リモートオリジンを削除する

git remote rm origin

ステップ3:ユーザー名とパスワードを使用してリモートオリジンを追加する

git remote add origin https://your_git_username:your_git_password@github.com/path_to_your_git.git

あなたがもう一度、リモートの起源を追加した後、あなたはまた、リモートとローカルあなたの枝を揃える必要がある-このような何か: git branch --set-upstream master origin/master
リチャードBown

2

GitHubを操作するたびにGitからユーザー名とパスワードの入力を求められた場合は、リポジトリにHTTPSクローンURLを使用している可能性があります。

HTTPSリモートURLの使用にはいくつかの利点があります。SSHよりも設定が簡単で、通常は厳密なファイアウォールとプロキシを介して機能します。ただし、リポジトリをプルまたはプッシュするたびに、GitHubの認証情報を入力するように求められます。

パスワードを保存するようにGitを構成できます。Windowsの場合

git config --global credential.helper wincred

2

macOS Cataline 10.15を実行しているときに、キーチェーンキャッシュ方式が機能しませんでした。そして私は使いたくhttps://なかったssh

これが私のために働いたものです:

git remote rm origin

git remote add origin https://your_git_username:your_git_password@github.com/path_to_your_git.git

これはGitLabでも動作するはずです

ユーザー名にメールアドレスが含まれているかどうかを確認してください。削除し@emailないと、エラーメッセージが表示されますURL using bad/illegal format or missing URL

お役に立てれば!


1
これは私のために働いた唯一の解決策です。your_git_usernameは重要でした。実際には:your_git_passwordを指定する必要はありませんでした。この時点で、「パスフレーズ」の入力を求められた場合でも、アカウントのパスワードを受け入れるようになりました。
kbulgrien

1

構成に応じて、さまざまな種類の認証があります。ここにいくつかあります:

  1. git credential-osxkeychain

    認証情報が無効な場合は、次の方法で削除します。

      git credential-osxkeychain erase
    

    または:

      printf "protocol=https\nhost=github.com\n" | git credential-osxkeychain erase
    

    したがって、Gitは再度キーチェーンの許可を求めません。その後、再度構成します。

    参照:GitHubでのOS Xキーチェーンからの認証情報の更新

  2. SSH RSAキー。

    これを行うには、SSHキーを追加したものと比較する必要があります。正しいIDを使用しているかどうか、ssh-add -L/ で確認しssh-add -lます。

  3. HTTPS認証(プロトコルのhttps代わりに使用している場合ssh)。

    使用する~/.netrc%HOME%/_netrc例えば、あなたの資格情報を提供するために、Windows上で)

      machine stash1.mycompany.com
      login myusername
      password mypassword
    

詳細:Stack Overflow でのGitHubとの同期





0

Microsoft Stackソリューション(WindowsおよびAzure DevOps)

最初に.git/configファイルを開いて、アドレスが次のようになっていることを確認します。

protocol://something@url

たとえば、Azure DevOpsの.git / config:

[remote "origin"]
    url = https://mystore@dev.azure.com/mystore/myproject/
    fetch = +refs/heads/*:refs/remotes/origin/*

それでも問題が解決しない場合は、Windows Credential Managerを開き、Windows Credentialsという名前のセーフボックスをクリックして、git関連のすべての資格情報を削除します。

これで、次にgitにログインしたときに、もうgitは消えません。


0

SSHエージェントをセットアップしている場合は、これをに追加して、~/.gitconfiggitがHTTPSではなくすべてのGitHubリポジトリにSSHを使用するように強制することもできます。

[url "ssh://git@github.com/"]
    insteadOf = git://github.com/
    insteadOf = https://github.com/

(主にパブリックリポジトリを使用している場合pushInsteadOfは、insteadOfではなくを使用することもできます。パブリックリポジトリからの読み取りは認証なしで実行できるためです)。

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