最近、リポジトリをGitHubのhttps://に同期するように切り替えました(ファイアウォールの問題のため)。毎回パスワードを要求されます。
毎回認証する代わりに、資格情報をキャッシュする方法はありgit push
ますか?
git-credential-winstore
Windowsに最適です。バギーとは何ですか?sshを設定することをお勧めしますが、何度か行っていますが、エラーが発生しやすく、複数のホストに接続する必要がある場合は、単純に機能しないことがあります。
最近、リポジトリをGitHubのhttps://に同期するように切り替えました(ファイアウォールの問題のため)。毎回パスワードを要求されます。
毎回認証する代わりに、資格情報をキャッシュする方法はありgit push
ますか?
git-credential-winstore
Windowsに最適です。バギーとは何ですか?sshを設定することをお勧めしますが、何度か行っていますが、エラーが発生しやすく、複数のホストに接続する必要がある場合は、単純に機能しないことがあります。
回答:
Git 1.7.9(2012年1月下旬にリリース)以降、Gitには、HTTP / HTTPSで常にパスワードを入力しなくて済むようにする、認証ヘルパーと呼ばれるきちんとしたメカニズムがあります。(以下のコメントでこの新機能を指摘してくれたdazonicに感謝します。)
Git 1.7.9以降では、次の資格情報ヘルパーのいずれかを使用できます。
git config --global credential.helper cache
... Gitに、パスワードを(デフォルトで)15分間メモリにキャッシュしておくように指示します。次のコマンドでタイムアウトを長く設定できます。
git config --global credential.helper "cache --timeout=3600"
(この例はLinuxのGitHubヘルプページで提案されています。)必要に応じて資格情報を永続的に保存することもできます。以下の他の回答を参照してください。
GitHubのヘルプでは、Mac OS Xを使用していて、Homebrewを使用してGitをインストールした場合、ネイティブのMac OS Xキーストアを次のように使用できることが示唆されています。
git config --global credential.helper osxkeychain
Windowsの場合、Windows用のGit Credential Managerまたはmsysgitのwincredと呼ばれるヘルパーがあります。
git config --global credential.helper wincred # obsolete
Windowsの2.7.3+のためのGit(2016年3月):
git config --global credential.helper manager
Linuxの場合、(またはKWalletなどの他のキーリング実装)を使用gnome-keyring
できます。
1.7.9より前のバージョンのGitでは、このより安全なオプションは使用できません。origin
リモートが使用するURLを変更して、次の方法でパスワードを含める必要があります。
https://you:password@github.com/you/example.git
...言い換えると:password
、ユーザー名の後との前@
。
次のコマンドを使用して、origin
リモコンの新しいURLを設定できます。
git config remote.origin.url https://you:password@github.com/you/example.git
を使用していることを確認してください。https
これを行うと、GitHubパスワードが.git
ディレクトリにプレーンテキストで保存されますが、これは明らかに望ましくありません。
別の方法は、ユーザー名とパスワードを~/.netrc
ファイルに入れることですが、リモートURLにパスワードを保持する場合と同様に、パスワードはプレーンテキストでディスクに保存されるため、安全性が低く、推奨されません。ただし、このアプローチを採用する場合は、次の行をに追加します~/.netrc
。
machine <hostname> login <username> password <password>
...交換<hostname>
サーバーのホスト名とし、<username>
そして<password>
ユーザー名とパスワードを使用して。また、そのファイルに制限付きのファイルシステム権限を設定することも忘れないでください。
chmod 600 ~/.netrc
Windowsでは、このファイルをと呼び_netrc
、%HOME%環境変数を定義する必要があることに注意してください。詳細については、以下を参照してください。
git config --global credential.helper osxkeychain
OS Xの場合。他のOSについては、help.github.com
https://username:PERSONAL_ACCESS_TOKEN@github.com/username/project.git
。ディスクに保存されているプレーンテキストのパスワードを、使用するのに十分なほど安全にします。
git config --global credential.helper cache
Windowsでは動作しません:stackoverflow.com/questions/11693074/…Windowsでgitcredentialstoreを使用して満足
以下を使用して、Gitに資格情報を永続的に保存させることもできます。
git config credential.helper store
注:これは便利ですが、Gitはプロジェクトディレクトリの下のローカルファイル(.git-credentials)に資格情報をクリアテキストで保存します(「ホーム」ディレクトリについては下記を参照)。これが気に入らない場合は、このファイルを削除して、キャッシュオプションの使用に切り替えます。
Gitがリモートリポジトリに接続する必要があるたびに資格情報を要求するように再開する場合は、次のコマンドを実行できます。
git config --unset credential.helper
でパスワードを保存するには.git-credentials
、あなたの中に%HOME%
プロジェクトディレクトリとは対照的に、ディレクトリ:使用--global
フラグ
git config --global credential.helper store
git config --global credential.helper store
--global
フラグは冗長でした。このフラグがなくても、資格情報ファイルは%USER_HOME%
ディレクトリに作成されました。
GitリポジトリのHTTPS URLのパスワードを保存することは、Windowsの~/.netrc
(UNIX)または%HOME%/_netrc
(に注意)で可能_
です。
しかし:そのファイルはあなたのパスワードをプレーンテキストで保存します。
解決策:GPG(GNU Privacy Guard)でそのファイルを暗号化し、パスワードが必要になるたびに(push
/ pull
/ fetch
/ clone
操作用に)Gitで復号化します。
注:Git 2.18(2018年第2四半期)では、暗号化された.netrc
ファイルの復号化に使用されるGPGをカスタマイズできるようになりました。
Luis Marsano ( ``)によるcommit 786ef50、commit f07eeed(2018年5月12日)を参照してください。(による合併Junio C浜野- -で017b7c5コミット、2018年5月30日)を
gitster
git-credential-netrc
:gpg
オプションを受け入れる
git-credential-netrc
gpg
gpg.programオプションに関係なく、' 'で解読するようにハードコードされました。
これは、現代のGnuPGを「gpg2
」のような別のものと呼ぶDebianのようなディストリビューションの問題です。
Windowsの場合:
(Gitのgpg.exe
ディストリビューションにはがありますが、完全なGPGインストールを使用するgpg-agent.exe
と、GPGキーに関連付けられたパスフレーズを記憶するが含まれます。)
インストールしgpg4Win Lite
、最小のGnuPGをコマンドラインインターフェイス(取る最新のgpg4win-vanilla-2.X.Y-betaZZ.exe
)、およびGPGのインストールディレクトリを使用してPATHを実行します。
set PATH=%PATH%:C:\path\to\gpg
copy C:\path\to\gpg\gpg2.exe C:\path\to\gpg\gpg.exe
( ' copy
'コマンドに注意してください:Gitはコマンド ' gpg
' を実行するためにBashスクリプトを必要とします。gpg4win-vanilla-2
が付属しているためgpg2.exe
、それを複製する必要があります。)
GPGキーを作成またはインポートし、それを信頼します。
gpgp --import aKey
# or
gpg --gen-key
(必ずそのキーにパスフレーズを入力してください。)
内のディレクトリに認証ヘルパースクリプトをインストールします%PATH%
。
cd c:\a\fodler\in\your\path
curl -o c:\prgs\bin\git-credential-netrc https://raw.githubusercontent.com/git/git/master/contrib/credential/netrc/git-credential-netrc.perl
(注意:スクリプトはGit 2.25.x / 2.26で名前が変更されます。以下を参照してください)
(はい、これはBashスクリプトですが、Gitによって呼び出されるため、Windowsでは動作します。)
_netrcファイルをクリアテキストで作成する
machine a_server.corp.com
login a_login
password a_password
protocol https
machine a_server2.corp.com
login a_login2
password a_password2
protocol https
(使用するURLに応じて、' protocol
'の部分: ' http
'または ' https
'を忘れないでください。)
そのファイルを暗号化します。
gpg -e -r a_recipient _netrc
(暗号化されたファイルのみを残して、ファイルを削除でき_netrc
ます_netrc.gpg
。)
その暗号化されたファイルを使用します。
git config --local credential.helper "netrc -f C:/path/to/_netrc.gpg -v"
( ' /
':C:\path\to...
はまったく機能しません。)(最初に-v -d
を使用して、何が起こっているかを確認できます。)
これ以降、認証を必要とするHTTP(S)URLを使用するGitコマンドは、その_netrc.gpg
ファイルを復号化し、接続しているサーバーに関連付けられているログイン/パスワードを使用します。GPGは初めて、ファイルを復号化するためにGPGキーのパスフレーズを要求します。それ以外の場合は、最初のGPG呼び出しによって自動的に起動されたgpg-agent がそのパスフレーズを提供します。
このようにして、複数の URL /ログイン/パスワードを1つのファイルに記憶し、暗号化してディスクに保存することができます。
「キャッシュ」ヘルパーよりも便利だと思います。リモートサービスごとに異なるパスワードを覚えて入力し(セッションごとに1回)、そのパスワードをメモリにキャッシュする必要があります。
Git 2.26(2020年第1四半期)では、使用するためのサンプル資格情報ヘルパーがそのまま使用できる.netrc
ように更新されています。パッチ/ディスカッションを参照してください。
Denton Liu()によるcommit 6579d93、commit 1c78c78(2019年12月20日)を参照してください。(合併によりJunio C浜野- -で1fd27f8コミットし、2019年12月25日)をDenton-L
gitster
contrib/credential/netrc
:構成PERL_PATH
可能にするサインオフ:Denton Liu
のPerlインタープリターのシバンパス
git-credential-netrc
はハードコーディングされています。
ただし、一部のユーザーは別の場所にあるため、スクリプトを手動で編集する必要がありました。
.perl
スクリプトにプレフィックスを追加して、それをテンプレートとして示し、生成されたバージョンを無視します。他のPerlスクリプトと同様に、から生成されるようにを
拡張します。Makefile
git-credential-netrc
git-credential-netrc.perl
Makefileのレシピはから恥知らずに盗まれました
contrib/mw-to-git/Makefile
。
そして:
2.26(2020年第1四半期)では、.netrcを使用するためのサンプル資格情報ヘルパーがそのまま使用できるように更新されています。
Denton Liu()によるcommit 6579d93、commit 1c78c78(2019年12月20日)を参照してください。(合併によりJunio C浜野- -で1fd27f8コミットし、2019年12月25日)をDenton-L
gitster
contrib/credential/netrc
:リポジトリ外で作業するサインオフ:Denton Liu
現在、
git-credential-netrc
gitリポジトリ以外では機能しません。次のエラーで失敗します。fatal: Not a git repository: . at /usr/share/perl5/Git.pm line 214.
ただし、リポジトリ内に存在する必要がある本当の理由はありません。資格情報ヘルパーは、リポジトリ外でも問題なく動作するはずです。
非自己のバージョンを呼び出し
config()
ているのでgit-credential-netrc
、リポジトリ内で実行することがもはや必要性を。
私はあなたがgpg-encryptedを使用していると想定しています
netrc
(そうでない場合は、おそらく単にを使用する必要がありますcredential-store
)。
「読み取り専用」のパスワードアクセスの場合、pass
configとの組み合わせは次のように少し優れています。[credential "https://github.com"] username = peff helper = "!f() { test $1 = get && echo password=`pass github/oauth`; }; f"
curl -o c:\prgs\bin\git-credential-netrc https://raw.github.com/git/git/master/contrib/credential/netrc/git-credential-netrc
目的です:gitが ' ' を呼び出せるようにするにgit-credential-netrc
は、パス($PATH
)のどこにでもコピーする必要がありますcredential-netrc
。
https://raw.githubusercontent.com/git/git/master/contrib/credential/netrc/git-credential-netrc.perl
(7年後のパイピング)のようです
HTTPSのURLにユーザーの資格情報を保存するには、昔ながらの簡単な方法があります。
https://user:password@github.com/...
あなたはでURLを変更することができます git remote set-url <remote-repo> <URL>
このアプローチの明らかな欠点は、プレーンテキストでパスワードを保存する必要があることです。ユーザー名(https://user@github.com/...
)を入力するだけで、面倒な作業の半分を節約できます。
SSHに切り替えるか、GitHubクライアントソフトウェアを使用することをお勧めします。
資格情報ストアを使用します。
Git 2.11+のためのOS XとLinuxでは、使用Gitリポジトリの資格証明ストアに建てられました:
git config --global credential.helper libsecret
Windows上のmsysgit 1.7.9 以降の場合:
git config --global credential.helper wincred
OS X上のGit 1.7.9以降の場合:
git config --global credential.helper osxkeychain
git: 'credential-gnome-keyring' is not a git command. See 'git --help'.
printf "protocol=https\nhost=git.mycompany.com\n" | git credential-manager get
(詳細はこちら)などの資格情報マネージャーにリクエストを送信することだけです。これには常に個人用アクセストークンを使用する必要があります。もちろん、GitHubアカウントで2FAを使用してください。
そのまま使えます
git config credential.helper store
次にプルまたはプッシュでパスワードを入力すると、パスワードはファイル.git-credentialsにプレーンテキストとして保存されます(少し安全ではありませんが、保護されたフォルダーに入れるだけです)。
そして、このページで述べたように、それだけです:
git config credential.helper manager
代わりに
最初にヘルパーをダウンロードする必要があることはすぐにはわかりませんでした!Atlassianの credential.helperダウンロードがGitリポジトリで永続的に認証されているのを発見しました。
見積もり:
OS Xで資格情報キャッシュを使用してGitを使用する場合は、次の手順に従います。
バイナリgit-credential-osxkeychainをダウンロードします。
以下のコマンドを実行して、バイナリが実行可能であることを確認します。
chmod a+x git-credential-osxkeychain
それをディレクトリに置き/usr/local/bin
ます。
以下のコマンドを実行します。
git config --global credential.helper osxkeychain
ログイン認証情報をURLの一部として含めるだけです。
git remote rm origin
git remote add origin https://username:mypassword@github.com/path/to/repo.git
注:この方法はお勧めしませんが、急いでいて他に何も機能しない場合は、この方法を使用できます。
GNU / Linuxセットアップでは、〜/ .netrcも非常にうまく機能します。
$ cat ~/.netrc
machine github.com login lot105 password howsyafather
GitがHTTPSトランスポートに使用しているネットワークライブラリによって異なる場合があります。
chmod 0600 ~/.netrc
。
Windowsの場合、Git Credential Manager(GCM)プラグインを使用できます。現在、Microsoftによって保守されています。良い点は、パスワードをプレーンテキストではなく、Windows資格情報ストアに保存することです。
プロジェクトのリリースページにインストーラーがあります。これにより、資格情報マネージャーが組み込まれたGit for Windowsの公式バージョンもインストールされます。GitHub(およびその他のサーバー)の2要素認証が可能です。また、最初にログインするためのグラフィカルインターフェイスがあります。
Cygwinユーザー(またはすでに公式のGit for Windowsを使用しているユーザー)の場合、手動インストールを選択することをお勧めします。リリースページからzipパッケージをダウンロードします。パッケージを抽出して、install.cmd
ファイルを実行します。これはあなたの~/bin
フォルダーにインストールされます。(~/bin
ディレクトリがPATHにあることを確認してください。)次に、次のコマンドを使用して構成します。
git config --global credential.helper manager
その後、Gitはgit-credential-manager.exe
任意のサーバーへの認証時にを実行します。
printf "protocol=https\nhost=git.mycompany.com\n" | git credential-manager get
(詳細はこちら)などの資格情報マネージャーにリクエストを送信することだけです。これには常に個人用アクセストークンを使用する必要があります。もちろん、GitHubアカウントで2FAを使用してください。
Markが言ったようにプレーンテキストでパスワードを保存したくない場合は、プッシュする場合とは異なるGitHub URLをフェッチに使用できます。構成ファイルの[remote "origin"]
次の場所:
url = git://github.com/you/projectName.git
pushurl = git@github.com:you/projectName.git
少なくともオープンソースプロジェクトでは、プッシュするときはパスワードを要求しますが、フェッチするときは要求しません。
独自の個人用APIトークン(OAuth)を作成し、通常の資格情報を使用するのと同じように使用できます(アドレス:)/settings/tokens
。例えば:
git remote add fork https://4UTHT0KEN@github.com/foo/bar
git push fork
.netrc
もう一つの方法は、あなたの中に、ユーザ/パスワードを設定することです~/.netrc
(_netrc
Windowsの場合)、例えば
machine github.com
login USERNAME
password PASSWORD
HTTPSの場合は、次の行を追加します。
protocol https
するにはGitの中であなたのGitHubのパスワードをキャッシュすることは HTTPSを使用する場合は、使用することができます資格ヘルパーをあなたGitHubのユーザ名とパスワード、それはGitHubのに話すたびに覚えておくことにGitを伝えるために。
git config --global credential.helper osxkeychain
(osxkeychain helper
必要)、git config --global credential.helper wincred
git config --global credential.helper cache
関連:
資格情報ヘルパーを使用できます。
git config --global credential.helper 'cache --timeout=x'
どこx
の秒数です。
store
、cache
およびその他の一般的なものがリストされ、説明されている場所へのリンクを提供できますか?
リポジトリのクローンを作成したらrepo
、repo/.git/config
以下のような設定を編集して追加できます。
[user]
name = you_name
password = you_password
[credential]
helper = store
そうすればusername
、password
何度も尋ねられることはありません。
helper = manager
(ただし、最初のプッシュではユーザー名+リポジトリを要求されます)。
これは安全なソリューションではありませんが、他に何もインストールせずに、単純なソリューションが必要な場合もあります。そして、ヘルパー=ストアが機能しなかったため、ダミーのヘルパーを作成しました。
スクリプトを作成して、ユーザーのbinフォルダー(ここではcredfakeという名前)に配置します。このスクリプトは、ユーザー名とパスワードを提供します。
#!/bin/bash
while read line
do
echo "$line"
done < "/dev/stdin"
echo username=mahuser
echo password=MahSecret12345
実行可能にする:
chmod u+x /home/mahuser/bin/credfake
次にgitで構成します。
git config --global credential.helper /home/mahuser/bin/credfake
(または--globalなしで使用して、1つのリポジトリのみに使用します)
-voilá-gitはこのユーザー+パスワードを使用します。
アカウントパスワードの代わりに認証トークンを使用する必要があります。GitHub設定/アプリケーションに移動し、個人用アクセストークンを作成します。トークンは、パスワードと同じ方法で使用できます。
トークンは、ユーザーがプロジェクトの作業にアカウントパスワードを使用できないようにすることを目的としています。新しいトークンの作成や古いトークンの取り消しなどの管理作業を行う場合にのみ、パスワードを使用してください。
ユーザーにGitHubアカウントへのアクセス全体を許可するトークンまたはパスワードの代わりに、プロジェクト固有のデプロイメントキーを使用して、単一のプロジェクトリポジトリへのアクセスを許可できます。通常の認証情報で他のGitアカウントまたはプロジェクトに引き続きアクセスできる場合は、次の手順でこの異なるキーを使用するようにGitプロジェクトを構成できます。
Host
、IdentityFile
展開のキーのため、多分UserKnownHostsFile
、多分User
(私はあなたがそれを必要としないと思うけれども)を。ssh -F /path/to/your/config $*
GIT_SSH=/path/to/your/wrapper
通常のGitコマンドの前に追加します。ここで、git remote
(原点)はgit@github.com:user/project.git
形式を使用する必要があります。セキュリティのために資格情報を使用することをお勧めしますが、キャッシュを使用してしばらく保持することができます。
git config --global credential.helper cache
git config credential.helper 'cache --timeout=3600'
認証情報は3600秒間保存されます。
--timeout
、資格は永久に保存されます。
windowsservercore
)内で機能しますか?
私のように2要素認証を使用している場合、状況は少し異なります。他に良い答えが見つからなかったので、後で見つけられるようにここに貼り付けます。
2要素認証を使用している場合、ユーザー名/パスワードを指定しても機能しません。アクセスが拒否されます。しかし、アプリケーションアクセストークンを使用し、Gitの資格情報ヘルパーを使用してそれをキャッシュすることができます。関連するリンクは次のとおりです。
そして、私はこれをどこで見たのか覚えていませんが、ユーザー名の入力を求められたとき、そこにアプリケーションアクセストークンを貼り付けます。次に、パスワードを空白のままにします。私のMacで動作しました。
通常、次のようなリモートURLがあります。
git remote -v
origin https://gitlab.com/username/Repo.git (fetch)
origin https://gitlab.com/username/Repo.git (push)
の使用中にユーザー名とパスワードをスキップする場合はgit push
、次のことを試してください。
git remote set-url origin https://username:password@gitlab.com/username/Repo.git
同じURL(パスワードを含むユーザーの詳細を含む)をoriginに追加しました。
注:ユーザー名がメールIDの場合は機能しません。
git remote -v
origin https://username:password@gitlab.com/username/Repo.git (fetch)
origin https://username:password@gitlab.com/username/Repo.git (push)
gitcredentials(7)マニュアルページから回答を得ました。私の場合、Windowsのインストールに資格情報キャッシュがありません。資格証明ストアを使用します。
credential-storeを使用した後、ユーザー名/パスワードは[user folder] /。git-credentialsファイルに保存されます。ユーザー名/パスワードを削除するには、ファイルの内容を削除するだけです。
git config --global credential.helper wincred
このストアのパスワードを永久に使用することをお勧めします。
Composerのドキュメントには、GitHub APIを使用できないようにできるため、次のように機能することが記載されていますgit clone
。
GitHubリポジトリで
no-api
キーをtrue
に設定すると、GitHub APIを使用する代わりに、他のGitリポジトリと同じようにリポジトリのクローンが作成されます。ただし、git
ドライバーを直接使用する場合とは異なり、composerは引き続きGitHubのzipファイルを使用しようとします。
したがって、セクションは次のようになります。
"repositories": [
{
"type": "vcs",
"no-api": true,
"url": "https://github.com/your/repo"
}
],
APIが存在するのには理由があることに注意してください。したがって、これはgithub.comへの負荷の増加に関する最後の手段となるはずです。
また、bashrcファイルを編集して、スクリプトを追加します。
これにより、Gitを起動するとパスワードが要求され、ログオフするまでパスワードが記憶されます。
SSH_ENV=$HOME/.ssh/environment
# 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
使用している場合 osxkeychain
していてトークンの有効期限が切れており、それを更新したい場合は、次の手順に従います。
端末で実行し、Enterキーを2回押します。
git credential-osxkeychain erase
host=github.com
protocol=https
ここで、ユーザー名/パスワードの入力を求められます。ただし、これは「実行」されないようで、再入力し続ける必要がある場合があります。
その場合は、コンピュータを再起動してください。次回gitコマンドを実行してユーザー名/パスワードを入力すると、保存されます。