ユーザー名とパスワードをgit [GitExtension]に保存する方法は?


1240

毎回プロンプトでユーザーとパスワードを入力せずに、GitExtensionで自動的にプッシュとプルを使用したいと思います。

では、どうすれば資格情報をgitに保存できますか?


1
また、SSH経由で認証を行うことができます。stackoverflow.com/questions/6565357/...
アントンタラセンコ


1
@AntonTarasenko私のgitconfigはプロキシについて何も言わず、[ユーザー] email = email@dummy.comのみ= uname [資格情報]ヘルパー=ストア
gc7__

回答:


2209

走る

git config --global credential.helper store

その後

git pull

ユーザー名とパスワードを入力すると、それらの詳細は後で記憶されます。資格情報はディスク上のファイルに保存され、ディスクのアクセス許可は「ユーザーが読み取り/書き込みのみ可能」ですが、プレーンテキストのままです。

後でパスワードを変更したい場合

git pull

パスワードが正しくないため、失敗します。次に、gitが問題のあるユーザーとパスワードを~/.git-credentialsファイルから削除し、再実行します。

git pull

以前と同じように機能するように、新しいパスワードを入力します。


6
後でパスワードを変更するために-uフラグはどのように重要ですか?
lucidbrot 2017

8
Debian用/ Ubuntuはlibsecret使用stackoverflow.com/questions/36585496/...
rofrol

3
@lucidbrot返信が遅くなってすみません。git pull -uが最新バージョンで動作しない。答えを更新しました。それがあなたの質問に答えることを願っています。
Neetika 2017年

51
これにより、ユーザー名とパスワードが〜/ .git-credentialsのプレーンテキストファイルに保存されます。誰でもそれを開いて読むことができます。
RoboAlex 2018

12
これは機能しません。引っ張れません。
Urasquirrel

350

を使用しgit configて、Gitで資格情報ストレージを有効にすることができます。

git config --global credential.helper store

このコマンドを実行すると、リモートリポジトリから初めてプルまたはプッシュするときに、ユーザー名とパスワードを尋ねられます。

その後、リモートリポジトリとのその後の通信のために、ユーザー名とパスワードを入力する必要はありません。

保存形式は.git-credentialsプレーンテキストで保存されたファイルです。

また、他のヘルパーgit config credential.helper、つまりメモリキャッシュを使用できます。

git config credential.helper cache <timeout>

これはオプションtimeout parameterで、資格情報がメモリに保持される期間を決定します。ヘルパーを使用すると、資格情報がディスクに触れることはなく、指定されたタイムアウト後に消去されます。default値は900 seconds (15 minutes).


警告:この方法を使用する場合、gitアカウントのパスワードはのplaintext形式で保存されますglobal .gitconfig file。たとえば、Linuxでは/home/[username]/.gitconfig

これが望ましくない場合は、ssh key代わりにアカウントにを使用してください。


3
.gitconfigファイルを表示したい-最初のコマンドは2番目のコマンドによって上書きされています:(
Adam

3
以下のためのgit config credential.helper cacheパスワードは専用メモリに保存され、ファイルに保存されません。参照:git-scm.com/docs/git-credential-cache
SA

1
動作しません。致命的:認証に失敗しました。パスワードも要求しません。
フィリップレゴ

2
補遺と同じように、秘密のsshキーはユーザーがアクセスできる場所にプレーンテキストで保存されるため、基本的にどちらの場合でも同じ攻撃対象となります。
ファルコ

これをgitlabに使用するには
anil

170

推奨される安全な方法:SSH

ssh Githubキーを作成します。行くgithub.com - >設定- > SSHとGPGキー- >新規SSHキー。次に、秘密鍵をコンピューターに保存します。

次に、秘密鍵が〜/ .ssh /ディレクトリにid_rsaとして保存されている場合は、認証用に追加します。

ssh-add -K ~/.ssh/id_rsa


より安全な方法:キャッシュ

git-credential-storeを使用して、ユーザー名とパスワードを一定期間キャッシュできます。CLI(ターミナルまたはコマンドプロンプト)に次のように入力するだけです。

git config --global credential.helper cache

次のように、タイムアウト期間(秒単位)を設定することもできます。

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


安全性がさらに低い方法

Git-credential-storeも使用できますが、パスワードをプレーンテキストファイルにディスクに保存します。

git config credential.helper store


時代遅れの答え-迅速かつ安全ではない

これは、パスワードをプレーンテキストで保存する安全な方法ではありません。誰かがあなたのコンピュータを制御できるようになると、あなたのパスワードが漏洩します!

次のようにユーザー名とパスワードを設定できます。

git config --global user.name "your username"

git config --global user.password "your password"

16
これは私にとってはうまくいきませんでした、それでもgit cloneはユーザー名とパスワードを要求します
Oliver

11
「git config --global -l」はコンソールにパスワードを表示するため、このようにパスワードを保存することはお勧めしません
CCC

1
これは私のために働いていません。gitconfigの仕様には「パスワード」の余地がないため、誰にとっても機能するのは奇妙です
Hamish Todd

.gitconfigは別のファイルです。ホームフォルダーにある.git-credentialsには、git:// username:password @ server / git / repoのように、ユーザー名とパスワードをURLでリポするURLが含まれています。テキストパスワード。SSH鍵を使用できない場合は、「git config --global credential.helper cache」を使用してください。
スカビット

ユーザーとパスワードを手動で追加しようとすると、設定ファイルが壊れてしまい、再度リポジトリのクローンを作成する必要がありました。...これを試してはいけない
Letie Techera

102

資格情報ヘルパーをオンにして、Gitがしばらくの間パスワードをメモリに保存するようにします。

ターミナルで、次のように入力します。

# Set git to use the credential memory cache
git config --global credential.helper cache

デフォルトでは、Gitはパスワードを15分間キャッシュします。

デフォルトのパスワードキャッシュタイムアウトを変更するには、次のように入力します。

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

GitHubヘルプから


7
重要なグローバルバージョンを提案したのはあなただけです。リポジトリを再クローンするたびに、それが台無しになってしまいました
Xerus

4
タイムアウトを無限大に設定するにはどうすればよいですか?パスワードをもう一度入力したくありません。
アバマンダー

8
@Avamanderは、cacheパーツをに置き換えるだけstoreです。したがって、完全なコマンドは次のようになりますgit config --global credential.helper store。これはあなたのパスワードをオープンテキストファイルに保存することに注意してください(言うまでもなく暗号化なし)
Aleksandar

2
@Casperこれは複数のアカウントでは機能しません。パスワードはストアからメールから取得されるのではなく、リストの最初のものが取得されます。
Avamander

2
@Avamander hm ..それはそのようになっているはずですか、それともバグかもしれませんか --timeoutパラメータの最大値はいくつですか?
アレクサンダー

50

~/.gitconfigファイルを編集して資格情報保存できます

sudo nano ~/.gitconfig

すでに持っているはずです

[user]
        email = your@email.com
        user = gitUSER

このファイルの最後に追加する必要があります。

[credential]
        helper = store

私がこのオプションを推奨する理由は、それがグローバルであることであり、いつでもオプションを削除する必要がある場合は、どこに移動して変更するかがわかっています。

このオプションは個人用コンピュータでのみ使用してください。

その後、あなたが引くとき| クローン| git passwordを入力します。通常、パスワードは次~/.git-credentialsの形式で保存されます

https://GITUSER:GITPASSWORD@DOMAIN.XXX

DOMAIN.XXXはGITHUB.COMである可能性があります。BITBUCKET.ORG | その他

ドキュメントを見る

端末を再起動します。


1
git bashウィンドウを再起動することを忘れないでください。私がそれをしたときだけ、それは私のために働いた。
sofs1

33

次のようにURLに資格情報を入力するだけです。

https://UsernamePassword@github.com/myRepoDir/myRepo.git

次のように保存できます。

git remote add myrepo https://Userna...

... 使用例:

git push myrepo master


これで、URLエイリアスが一覧表示されます。

git remote -v

...そして、それらの1つを削除するコマンド:

git remote rm myrepo


8
URLにパスワードを含めないようにして、Gitがユーザー名ではなくパスワードを要求するようにすることもできます。
カンガルー

HTTPの代わりにSSHを使用するのは非常に簡単で安全です。したがって、Gitパスワードを秘密にして、SSHキーのみを使用することができます。Gitリポジトリ上のSSHに関する情報:help.github.com/en/enterprise/2.16/user/... git@github.com:Username/myRepo.git
Loïch

URLにパスワードがあると、端末の履歴に保存されるため、この方法はあまり安全ではありません。
Josh Correia

現在、Wikiはを介してのみ複製できhttps、を介しては複製できないsshため、このようなソリューションはそこで有用です。また、GitHubパスワードよりもわずかに安全なoauth-tokenを使用できることにも注意してください。
AstroFloyd

31

グローバル設定の場合は、ターミナルを(どこからでも)開き、以下を実行します。

  git config --global user.name "your username"
  git config --global user.password "your password"

これにより、マシン上にあるローカルgitリポジトリがその情報を使用します。

次のようにすることで、各リポジトリに対して個別に設定できます。

  • repoフォルダーでターミナルを開きます。
  • 以下を実行します。

    git config user.name "your username"
    git config user.password "your password"
    

そのフォルダーのみに影響します(構成がローカルであるため)。


8
誰でも見ることができる単純な構成ファイルにそのような資格情報を含めることは危険ではありませんか?
bool3max

1
あなたの質問は別のトピックでなければなりません。ここでは、グローバルおよびローカルでgitの名前とパスワードを構成する方法について説明します。
Tuananhcwrs

入力バディをありがとう
bool3max

11
回答の考えられるセキュリティの問題について質問することは、回答の品質と潜在的に何千ものユーザーに直接影響を与えるため、ここに追加します。
Michael Kargl

2
動作しません、--localタグを追加しましたが、何も起こりません
PayamBeirami

23

git-credential-storeを使用して、パスワードを暗号化せずにディスクに保存し、ファイルシステムの権限によってのみ保護することができます。

$ git config credential.helper store
$ git push http://example.com/repo.git
Username: <type your username>
Password: <type your password>

[several days later]
$ git push http://example.com/repo.git
[your credentials are used automatically]

ファイルに保存されている資格情報を確認できます ~/.git-credentials

詳細については、git-credential-store-資格情報をディスクに保存するヘルパーにアクセスしてください


17

ユーザー名/パスワード認証よりもSSH認証を使用する方が安全です。

Macを使用している場合、SSHクライアント認証はMacOSキーチェーンに統合されています。SSHキーを作成したら、端末に次のように入力します。

ssh-add -K ~/.ssh/id_rsa

これにより、SSH秘密鍵がMacOSキーチェーンに追加されます。gitクライアントは、リモートサーバーに接続するときにsshを使用します。ssh公開鍵をサーバーに登録している限り、問題はありません。


1
Kではなくkである必要がありますか?
dez93_2000

1
参考:私はMacで作業しています。そうは言っても、「man」情報から:「-k」キーをエージェントにロードまたはエージェントから削除するときは、プレーンな秘密キーのみを処理し、証明書をスキップします。"-K" IDを追加すると、各パスフレーズもユーザーのキーチェーンに保存されます。-dを使用してIDを削除すると、各パスフレーズがIDから削除されます。
Birol Efe

3
これはhttpsベースのリポジトリでは機能しないと思います。
zakmck

5
この回答は、パスワード(HTTPSリポジトリ)とSSH秘密鍵を混同しているようです。
スティーブベネット

2
同意しません。ホストへのアクセスを許可することで、これ以上安全にすることはできませんSSH。HTTP認証を使用すると、資格情報を盗んだユーザーはにしかアクセスできなくなりGitHub/GitLabます。また、トークンは寿命が制限されるように設計されています。
Dimitri Kopriwa 2018年

16

数十を超えた後 SOの記事、ブログなどの、私が試してみたすべての方法を、これは私が思い付いたものです。それはすべてをカバーしています。

バニラDevOps Git資格情報とプライベートパッケージのチートシート

これらは、リポジトリを複製するためにgitを安全に認証できるすべての方法とツールです 、対話型のパスワードプロンプトなしでです

  • SSH公開鍵
    • SSH_ASKPASS
  • APIアクセストークン
    • GIT_ASKPASS
    • .gitconfigの代わりに
    • .gitconfig [資格情報]
    • .git-credentials
    • .netrc
  • プライベートパッケージ(無料)
    • node / npm package.json
    • python / pip / eggs requirements.txt
    • ruby gems Gemfile
    • golang go.mod

銀の弾丸

Just Works™が必要ですか?これは魔法の銀の弾です。

アクセストークンを取得し(GithubまたはGiteaの手順が必要な場合は、チートシートのセクションを参照)、環境変数に設定します(ローカル開発とデプロイメントの両方)。

MY_GIT_TOKEN=xxxxxxxxxxxxxxxx

Githubの場合、次の行をそのままコピーして実行します。

git config --global url."https://api:$MY_GIT_TOKEN@github.com/".insteadOf "https://github.com/"
git config --global url."https://ssh:$MY_GIT_TOKEN@github.com/".insteadOf "ssh://git@github.com/"
git config --global url."https://git:$MY_GIT_TOKEN@github.com/".insteadOf "git@github.com:"

おめでとうございます。httpsを使用する場合でも、ssh urlのいずれかのスタイルを使用する場合でも、gitリポジトリのクローンを自動化するツールは、パスワードプロンプトによって遮られることはありません。

Githubを使用していませんか?

他のプラットフォーム(Gitea、Github、Bitbucket)の場合は、URLを変更するだけです。ユーザー名は変更しないでください(任意ですが、個別の構成エントリに必要です)。

互換性

これはMacOS、Linux、Windows(Bashの場合)、Docker、CircleCI、Heroku、Akkerisなどでローカルに機能します。

より詳しい情報

チートシートの「.gitconfigの代わりに」セクションを参照してください。

安全保障

チートシートの「セキュリティ」セクションをご覧ください。


2
これは命の恩人です。ありがとう。
annaoomph

2
私が探してgit config --global credential."https://somegithost.com".username MyUserNameいたのはあなたのチートシートにありますが、この回答スレッドの他の場所にはありませんでした。その特定の解決策はOPの質問には答えませんが、私の答えにはなりました。
TheDudeAbides

1
これは素晴らしい !!!ベストアンサー、どうもありがとう。
パルサ

12

その場合、次のコマンドラインを使用してGitHubのパスワードとユーザー名を記憶するようにgitに指示するgit資格情報ヘルパーが必要です。

git config --global credential.helper wincred 

また、SSHキーを使用してリポジトリを使用している場合は、認証にSSHキーが必要です。


11

上記の答えはどれもうまくいきませんでした。私は私がしたかった以下のたびに取得保管fetchまたはをpull

Enter passphrase for key '/Users/myusername/.ssh/id_rsa':


Macの場合

パスフレーズを尋ねるのを止めることができました:

  1. 次のコマンドを実行して構成を開きます。 vi ~/.ssh/config
  2. 以下を追加しました: UseKeychain yes
  3. 保存して終了:Escを押してから、:wq!

Windowsの場合

このstackexchangeの情報を使用してそれを機能させることができました:https://unix.stackexchange.com/a/12201/348665


これは、SSHプロトコルを使用しているためです(他の回答ではHTTPSを使用しています)。
mariusm

6

~/.gitconfigファイルの編集とは別に、次のようにすれば実行できます。

git config --local --edit

または

git config --global --edit

常に重引用符を使用することに注意してください:

git config --local user.name 'your username'
git config --local user.password 'your password'

または

git config --global user.name 'your username'
git config --global user.password 'your password'

ユーザー名とパスワードには、二重引用符を使用するとパスワードを壊す可能性のあるいくつかの文字が使用される場合があります。

--localまたは--global、構成パラメーターがプロジェクトまたはosユーザー用に保存されることを意味します。


また、このチェック1もっと説明しています。
prosti

6

ただ使う

git config --global credential.helper store

そしてgit pullを実行すると、ユーザー名とパスワードの入力を求められます。これからは、ユーザー名とパスワードの入力を求められなくなり、詳細が保存されます


4
基本的に、受け入れられた答えを繰り返しまし
jsamol

4

ユーザー名とパスワードを.git-credentialsに保存します

.git-credentialsは、実行時にユーザー名とパスワード(アクセストークン)が格納される場所ですgit config --global credential.helper store。これは、他の回答が示唆するとおり、ユーザー名とパスワードまたはアクセストークンを入力します。

https://${username_or_access_token}:${password_or_access_token}@github.com

したがって、ユーザー名とパスワード(アクセストークン)を保存するには:

git config —-global credential.helper store
echo “https://${username}:${password_or_access_token}@github.com“ > ~/.git-credentials

これはgithubロボットに非常に役立ちます。たとえば、異なるブランチのルールを設定して同じDockerリポジトリでチェーン自動ビルドを解決し、次にそれにプッシュすることでトリガーしますpost_push、Dockerハブのフッカーにます。

この例は、ここの stackoverflowにあります。


ありがとう、あなたは救世主です!https:// $ {access_token}:$ {access_token} @ github.comを設定することもできます
Lucas Mendes Mota Da Fonseca

1
@LucasMendesMotaDaFonsecaアクセストークンをユーザー名として使用できますか?
JiaHao Xu

3

git資格情報をキャッシュする簡単な方法:

git config credential.helper 'cache' --timeout=10800

素敵で安全な

タイムアウトは秒単位です。


2

スレッドを完全に読み、この質問に対するほとんどの答えを試してみた後、私は最終的に私に役立つ手順を見つけました。誰かが複雑なユースケースに対処しなければならない場合でも、共有したいのですが、私がしたように、フルスレッドやgitcredentialsgitcredentials-storeなどのマニュアルページを調べたくありません。

私が提案する手順の下に検索したIF(私のような)あなたは、いくつかの別のユーザー名/パスワードの組み合わせを使用して、いくつかのプロバイダー(GitLab、GitHubの、のBitbucketなど)から複数のリポジトリに対処する必要があります。代わりに、使用するアカウントが1つしかない場合は、git config --global credential.helper storeまたはgit config --global user.name "your username"非常によく、前の回答で説明されているなどのソリューションを。

私の解決策:

  1. 以前の実験が邪魔になる場合に備えて、グローバル資格情報ヘルパーの設定を解除します:)

> git config --global --unset credentials.helper

  1. リポジトリのルートディレクトリに移動し、ローカルの資格情報ヘルパーを無効にします(必要な場合)

> cd /path/to/my/repo

> git config --unset credential.helper

  1. リポジトリの認証情報を保存するファイルを作成します

> git config credential.helper 'store --file ~/.git_repo_credentials'

:このコマンドは、「。git_repo_credentials」という名前の新しいファイルをホームディレクトリに作成します。このディレクトリにGitが認証情報を保存します。ファイル名を指定しない場合、Gitはデフォルトの「.git_credentials」を使用します。この場合、次のコマンドを発行するだけで十分です。

> git config credential.helper store

  1. ユーザー名を設定

git config credential.*.username my_user_name

:リポジトリが同じプロバイダー(GitLabなど)からのものである場合は、通常「*」を使用しても問題ありません。代わりに、リポジトリが異なるプロバイダーによってホストされている場合は、次の例(GitLabの場合)のように、すべてのリポジトリのプロバイダーへのリンクを明示的に設定することをお勧めします。

git config credential.https://gitlab.com.username my_user_name

この時点で、資格情報を必要とするコマンド(例git pull:)を発行すると、「my_user_name」に対応するパスワードの入力を求められます。gitは資格情報を ".git_repo_credentials"に保存し、以降のアクセスで同じデータを自動的に使用するため、これは一度だけ必要です。


2

Linux Ubuntuでのrifrolのコメントから、この答えから、Ubuntuでの方法は次のとおりです:

sudo apt-get install libsecret-1-0 libsecret-1-dev
cd /usr/share/doc/git/contrib/credential/libsecret
sudo make
git config --global credential.helper /usr/share/doc/git/contrib/credential/libsecret/git-credential-libsecret

他の一部のディストリビューションではバイナリを提供しているため、ビルドする必要はありません。

OS Xでは、通常、「osxkeychain」のデフォルトモジュールで「ビルド」されているため、無料で入手できます。


2

公式のgitドキュメントを確認してください:

リモートへの接続にSSHトランスポートを使用する場合は、パスフレーズなしのキーを使用できるため、ユーザー名とパスワードを入力せずにデータを安全に転送できます。ただし、これはHTTPプロトコルでは不可能です。すべての接続にはユーザー名とパスワードが必要です。これは、パスワードに使用するトークンがランダムに生成され発音できない2要素認証のシステムではさらに難しくなります。

幸い、Gitにはこれに役立つ資格情報システムがあります。Gitには、ボックスにいくつかのオプションが用意されています。

  • デフォルトでは、まったくキャッシュしません。すべての接続で、ユーザー名とパスワードの入力を求められます。

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

  • 「保存」モードでは、資格情報がディスク上のプレーンテキストファイルに保存され、期限切れになることはありません。つまり、Gitホストのパスワードを変更するまで、資格情報を再度入力する必要はありません。このアプローチの欠点は、パスワードがクリアテキストでホームディレクトリのプレーンファイルに保存されることです。

  • Macを使用している場合、Gitには「osxkeychain」モードが付属しており、システムアカウントに接続されている安全なキーチェーンに認証情報をキャッシュします。この方法では、資格情報がディスクに保存され、期限切れになることはありませんが、HTTPS証明書とSafariの自動入力を保存するのと同じシステムで暗号化されます。

  • Windowsを使用している場合は、「Git Credential Manager for Windows」と呼ばれるヘルパーをインストールできます。これは上記の「osxkeychain」ヘルパーに似ていますが、Windows資格情報ストアを使用して機密情報を制御します。それはで見つけることができ https://github.com/Microsoft/Git-Credential-Manager-for-Windows

Git構成値を設定することにより、これらの方法のいずれかを選択できます。

$ git config --global credential.helper cache

$ git config --global credential.helper store

https://git-scm.com/book/en/v2/Git-Tools-Credential-Storage

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