最近、リポジトリをGitHubのhttps://に同期するように切り替えました(ファイアウォールの問題のため)。毎回パスワードを要求します。
git Push
を毎回認証する代わりに、資格情報をキャッシュする方法はありますか?
Git 1.7.9(2012年1月下旬にリリース)以降、GitにはHTTP(HTTP)のためにパスワードを常に入力しなくても済むようにするための 認証情報ヘルパー というきちんとしたメカニズムがあります。 (下記のコメントでこの新機能を指摘してくれた 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を使っていてGitをインストールするのに Homebrew を使ったなら、ネイティブのMac OS Xキーストアを使うことができる:
git config --global credential.helper osxkeychain
Windowsの場合、 Windows用Git Credential Manager または msysgitでwincred というヘルパーがあります。
git config --global credential.helper wincred # obsolete
Git for Windows 2.7.3+ (2016年3月):
git config --global credential.helper manager
Linuxでは、 use gnome-keyring
(またはKWalletなどの他のキーリング実装)を使用できます。
Gitの1.7.9より前のバージョンでは、このより安全なオプションは利用できません、そしてあなたのOrigin
リモートがこのようにパスワードを含めるために使うURLを変更する必要があります:
https://you:[email protected]/you/example.git
...言い換えれば、ユーザー名の後で:password
の前に@
が付いているということです。
Origin
リモートの新しいURLを設定することができます。
git config remote.Origin.url https://you:[email protected]/you/example.git
https
を使用していることを確認してください。これを行うと、GitHubのパスワードが.git
ディレクトリにプレーンテキストで保存されることに注意してください。これは明らかに望ましくありません。
別の方法として、リモートURLのパスワードを保持するのと同様に、ユーザー名とパスワードを~/.netrc
ファイルに保存する方法があります。これは、パスワードがテキスト形式でディスクに保存されるため、安全性が低いため推奨されません。ただし、この方法を使用する場合は、~/.netrc
に次の行を追加してください。
machine <hostname> login <username> password <password>
... <hostname>
をサーバーのホスト名に、<username>
と<password>
をあなたのユーザー名とパスワードに置き換えます。そのファイルに制限的なファイルシステム許可を設定することも忘れないでください。
chmod 600 ~/.netrc
Windowsでは、このファイルは_netrc
と呼ばれるべきで、あなたは環境変数%HOME%を定義する必要があるかもしれないことに注意してください。
次のようにして、Gitにあなたの認証情報を永久に保存させることもできます。
git config credential.helper store
注:これは便利ですが、Gitはあなたの資格をプロジェクトディレクトリの下のローカルファイル(.git-credentials)に平文で保存します( "home"ディレクトリについては下記を参照してください)。気に入らない場合は、このファイルを削除してキャッシュオプションを使用するように切り替えてください。
リモートリポジトリへの接続が必要になるたびにGitがクレデンシャルの入力を求めて再開するようにしたい場合は、次のコマンドを実行します。
git config --unset credential.helper
プロジェクトディレクトリではなく、.git-credentials
ディレクトリの%HOME%
にパスワードを保存するには、--global
フラグを使用します。
git config --global credential.helper store
GitリポジトリのHTTPS URLのパスワードを保存するには、Windowsで~/.netrc
(Unix)または%HOME%/_netrc
(_
に注意)を使用します。
しかし、:そのファイルはパスワードをプレーンテキストで保存します。
Solution: GPG(GNU Privacy Guard) でそのファイルを暗号化し、パスワードが必要になるたびにGitに復号化させます( Push
/pull
/fetch
/clone
操作の場合)。
注:Git 2.18(2018年第2四半期)では、暗号化された.netrc
ファイルの復号化に使用されるGPGをカスタマイズできるようになりました。
commit 786ef5 、 commit f07eeed (2018年5月12日)by Luis Marsano( ``) を参照してください。
( 浜野邦夫-gitster
- in commit 017b7c5 、2018年5月30日)
git-credential-netrc
:gpg
オプションを受け入れます
git-credential-netrc
は、gpg.programオプションに関係なく、 'gpg
'で復号化するようにハードコードされていました。
これは、 'gpg2
'のような現代のGnuPGを別のものと呼ぶ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
(はい、これは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
ファイルをdeleteできるようになりました。)
その暗号化されたファイルを使用します。
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回)入力する必要があります。
HTTPS URLにユーザーの資格情報を保存するための簡単で昔ながらの方法があります。
https://user:[email protected]/...
URLはgit remote set-url <remote-repo> <URL>
で変更できます
このアプローチの明らかな欠点は、パスワードをプレーンテキストで保存しなければならないということです。それでもユーザー名(https://[email protected]/...
)を入力するだけで、少なくとも半分の手間が省けます。
SSHに切り替えるか、GitHubクライアントソフトウェアを使用することをお勧めします。
資格情報ストアを使用します。
OS X および Linux のGit 2.11以降の場合、 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 config credential.helper store
次回プルまたはプッシュでパスワードを入力すると、そのパスワードはプレーンテキストとして.git-credentialsに保存されます(少し安全ではありませんが、保護されたフォルダに置くだけです)。
このページに記載されているように、これで終わりです。
URLの一部としてログイン認証情報を含めるだけです。
git remote rm Origin
git remote add Origin https://username:[email protected]/path/to/repo.git
注:私はこの方法をお勧めしませんが、Rushに入っていて他に何もうまくいかない場合は、この方法を使用できます。
私が最初にヘルパーをダウンロードする必要があることはすぐにはわかりませんでした。 AtlassianのGitリポジトリを使った恒久的な認証 。
引用:
OS XでGitと認証情報のキャッシュを併用する場合は、次の手順に従ってください。
バイナリのgit-credential-osxkeychainをダウンロードしてください。
以下のコマンドを実行して、バイナリが実行可能であることを確認してください。
chmod a+x git-credential-osxkeychain
ディレクトリ/usr/local/bin
に置きます。
以下のコマンドを実行してください。
git config --global credential.helper osxkeychain
GNU/Linuxセットアップでは、〜/ .netrcも非常にうまく機能します。
$ cat ~/.netrc
machine github.com login lot105 password howsyafather
Gitが _ https _ transportに使用しているネットワークライブラリによって異なります。
Windowsの場合、 Git Credential Manager (GCM)プラグインを使用できます。現在Microsoftによって管理されています。いいところは、パスワードがプレーンテキストとしてではなく、Windows資格情報ストアに保存されることです。
プロジェクトの リリースページ にインストーラがあります。これにより、資格情報マネージャが組み込まれた公式バージョンの Git for Windows もインストールされます。それは 二要素認証 GitHub(および他のサーバー)を許可します。そして最初にログインするためのグラフィカルインターフェースを持っています。
Cygwinユーザー(または既に公式Git for Windowsを使用しているユーザー)の場合は、手動インストールをお勧めします。 releaseページ からZipパッケージをダウンロードしてください。パッケージを解凍してから、install.cmd
ファイルを実行します。これはあなたの~/bin
フォルダにインストールされます。 (~/bin
ディレクトリがPATHにあることを確認してください。)次に、このコマンドを使用してそれを設定します。
git config --global credential.helper manager
その後、Gitは、どのサーバーへの認証時にもgit-credential-manager.exe
を実行します。
Markが言ったように平文でパスワードを保存したくない場合は、プッシュするのとは異なるGitHub URLを取得のために使うことができます。設定ファイルの[remote "Origin"]
の下に
url = git://github.com/you/projectName.git
pushurl = [email protected]:you/projectName.git
プッシュするときはパスワードを要求しますが、少なくともオープンソースプロジェクトの場合はフェッチするときは要求しません。
あなた自身の パーソナルAPIトークン ( OAuth )を作成して、通常の認証情報を使うのと同じ方法でそれを使うことができます(:/settings/tokens
)。例えば:
git remote add fork https://[email protected]/foo/bar
git Push fork
.netrc
別の方法はあなたのユーザー/パスワードを~/.netrc
(Windowsでは_netrc
)で設定することです。
machine github.com
login USERNAME
password PASSWORD
HTTPSの場合は、次の行を追加します。
protocol https
HTTPS使用時に GitHubパスワードをGitにキャッシュする にするには、 クレデンシャルヘルパー を使用して、GitHubと通信するたびにGitHubのユーザー名とパスワードを記憶するようにします。
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
は秒数です。
repo
のクローンを作成したら、repo/.git/config
を編集して以下のような設定を追加できます。
[user]
name = you_name
password = you_password
[credential]
helper = store
そうするとusername
とpassword
の入力を求められることはなくなります。
これは安全な解決策ではないことを私は知っています、しかし時々あなたはただ他のものをインストールすることなく - 単純な解決策を必要とします。そして helper = store は私にはうまくいかなかったので、私はダミーのヘルパーを作成しました:
スクリプトを作成し、ユーザーの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
(または、1つのレポジトリのみ--globalなしで使用してください)
そして - voilá - gitはこのユーザー+パスワードを使用します。
アカウントパスワードの代わりに認証トークンを使用する必要があります。 GitHub設定/アプリケーションに移動してから、個人用アクセストークンを作成してください。トークンは、パスワードと同じ方法で使用できます。
このトークンは、ユーザーがプロジェクトの作業にアカウントのパスワードを使用できないようにするためのものです。新しいトークンの作成や古いトークンの取り消しなどの管理作業を行うときにのみパスワードを使用してください。
ユーザーにGitHubアカウントへの完全なアクセスを許可するトークンまたはパスワードの代わりに、プロジェクト固有のデプロイメントキーを使用して単一のプロジェクトリポジトリへのアクセスを許可することができます。通常の認証情報を使用して他のGitアカウントまたはプロジェクトにアクセスできる場合は、Gitプロジェクトが次の手順でこの異なるキーを使用するように設定できます。
Host
、IdentityFile
、おそらくUserKnownHostsFile
、そしておそらくUser
を含むSSH設定ファイルを書きます(私はあなたはそれを必要としないと思いますが)。ssh -F /path/to/your/config $*
です。GIT_SSH=/path/to/your/wrapper
を付けます。ここでgit remote
(Origin)は[email protected]:user/project.git
フォーマットを使わなければなりません。セキュリティのために認証情報を使用することをお勧めしますが、キャッシュを使用してしばらくの間それを保持することができます。
git config --global credential.helper cache
git config credential.helper 'cache --timeout=3600'
認証情報は3600秒間保存されます。
二要素認証 を使っているのであれば、状況は少し異なります。私は他のところで良い答えを見つけられなかったので、私は多分私が後でそれを見つけることができるようにここでそれをつけるでしょう。
二要素認証を使用している場合は、ユーザー名/パスワードを指定してもうまくいきません - アクセスが拒否されます。しかし、アプリケーションアクセストークンを使用し、それをキャッシュするために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:[email protected]/username/Repo.git
Originに同じURLを(パスワードを含むユーザーの詳細とともに)追加したところです。
注: usernameが電子メールIDの場合は機能しません。
git remote -v
Origin https://username:[email protected]/username/Repo.git (fetch)
Origin https://username:[email protected]/username/Repo.git (Push)
私はWindows 10を使っています
git config --global credential.helper wincred
gitcredentials(7)マニュアルページから回答を得ました。私の場合は、私のWindowsインストールには資格キャッシュがありません。私はcredentials-storeを使います。
Credential-storeを使用した後、ユーザー名/パスワードは[ユーザーフォルダー] /。git-credentialsファイルに保存されます。ユーザー名/パスワードを削除するには、ファイルの内容を削除するだけです。
作曲家のドキュメント メンション あなたがGitHub APIを使わないようにすることで、git clone
のように振舞うことができます。
GitHubリポジトリで
no-api
キーをtrue
に設定すると、GitHub APIを使用する代わりに他のGitリポジトリと同じようにリポジトリのクローンを作成します。しかしgit
ドライバを直接使用するのとは異なり、作曲家は依然として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