web-dev-qa-db-ja.com

コミットをプッシュするためにGitHub資格情報をキャッシュする方法はありますか?

最近、リポジトリをGitHubのhttps://に同期するように切り替えました(ファイアウォールの問題のため)。毎回パスワードを要求します。

git Pushを毎回認証する代わりに、資格情報をキャッシュする方法はありますか?

1786
Zepplock

Gitバージョン1.7.9以降

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などの他のキーリング実装)を使用できます。

1.7.9より前のGitバージョン

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ディレクトリにプレーンテキストで保存されることに注意してください。これは明らかに望ましくありません。

どのGitバージョンでも(バージョン0.99以降)

別の方法として、リモートURLのパスワードを保持するのと同様に、ユーザー名とパスワードを~/.netrcファイルに保存する方法があります。これは、パスワードがテキスト形式でディスクに保存されるため、安全性が低いため推奨されません。ただし、この方法を使用する場合は、~/.netrcに次の行を追加してください。

machine <hostname> login <username> password <password>

... <hostname>をサーバーのホスト名に、<username><password>をあなたのユーザー名とパスワードに置き換えます。そのファイルに制限的なファイルシステム許可を設定することも忘れないでください。

chmod 600 ~/.netrc

Windowsでは、このファイルは_netrcと呼ばれるべきで、あなたは環境変数%HOME%を定義する必要があるかもしれないことに注意してください。

2274
Mark Longair

次のようにして、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
686
Giri Alwar

TLDR; Git 1.8.3 +で暗号化されたnetrcファイルを使用します。

GitリポジトリのHTTPS URLのパスワードを保存するには、Windowsで~/.netrc(Unix)または%HOME%/_netrc_に注意)を使用します。

しかし、:そのファイルはパスワードをプレーンテキストで保存します。

SolutionGPG(GNU Privacy Guard) でそのファイルを暗号化し、パスワードが必要になるたびにGitに復号化させます( Push/pull/fetch/clone操作の場合)。


注:Git 2.18(2018年第2四半期)では、暗号化された.netrcファイルの復号化に使用されるGPGをカスタマイズできるようになりました。

commit 786ef5commit f07eeed (2018年5月12日)by Luis Marsano( ``) を参照してください。
浜野邦夫-gitster- in commit 017b7c5 、2018年5月30日)

git-credential-netrcgpgオプションを受け入れます

git-credential-netrcは、gpg.programオプションに関係なく、 'gpg'で復号化するようにハードコードされていました。
これは、 'gpg2'のような現代のGnuPGを別のものと呼ぶDebianのようなディストリビューションの問題です


Windowsのステップバイステップの手順

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回)入力する必要があります。

94
VonC

HTTPS URLにユーザーの資格情報を保存するための簡単で昔ながらの方法があります。

https://user:[email protected]/...

URLはgit remote set-url <remote-repo> <URL>で変更できます

このアプローチの明らかな欠点は、パスワードをプレーンテキストで保存しなければならないということです。それでもユーザー名(https://[email protected]/...)を入力するだけで、少なくとも半分の手間が省けます。

SSHに切り替えるか、GitHubクライアントソフトウェアを使用することをお勧めします。

40
wortwart

資格情報ストアを使用します。

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
37
roo2

そのまま使えます

git config credential.helper store

次回プルまたはプッシュでパスワードを入力すると、そのパスワードはプレーンテキストとして.git-credentialsに保存されます(少し安全ではありませんが、保護されたフォルダに置くだけです)。

このページに記載されているように、これで終わりです。

https://git-scm.com/docs/git-credential-store

36
sgoran

URLの一部としてログイン認証情報を含めるだけです。

git remote rm Origin 
git remote add Origin https://username:[email protected]/path/to/repo.git

注:私はこの方法をお勧めしませんが、Rushに入っていて他に何もうまくいかない場合は、この方法を使用できます。

22
Tarun Gupta

私が最初にヘルパーをダウンロードする必要があることはすぐにはわかりませんでした。 AtlassianのGitリポジトリを使った恒久的な認証

引用:

OS XでGitと認証情報のキャッシュを併用する場合は、次の手順に従ってください。

バイナリのgit-credential-osxkeychainをダウンロードしてください。

以下のコマンドを実行して、バイナリが実行可能であることを確認してください。

chmod a+x git-credential-osxkeychain

ディレクトリ/usr/local/binに置きます。

以下のコマンドを実行してください。

git config --global credential.helper osxkeychain
22
Ben

GNU/Linuxセットアップでは、〜/ .netrcも非常にうまく機能します。

$ cat ~/.netrc
machine github.com login lot105 password howsyafather

Gitが _ https _ transportに使用しているネットワークライブラリによって異なります。

19
helloPiers

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を実行します。

16
Nadeem Khedr

Markが言ったように平文でパスワードを保存したくない場合は、プッシュするのとは異なるGitHub URLを取得のために使うことができます。設定ファイルの[remote "Origin"]の下に

url = git://github.com/you/projectName.git
pushurl = [email protected]:you/projectName.git

プッシュするときはパスワードを要求しますが、少なくともオープンソースプロジェクトの場合はフェッチするときは要求しません。

12
MatrixFrog

OAuth

あなた自身の パーソナル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のユーザー名とパスワードを記憶するようにします。

  • Mac:git config --global credential.helper osxkeychainosxkeychain helperは必須です)
  • Windows:git config --global credential.helper wincred
  • Linuxとその他:git config --global credential.helper cache

関連する

10
kenorb

認証情報ヘルパーを使用できます。

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

xは秒数です。

9
Charan

repoのクローンを作成したら、repo/.git/configを編集して以下のような設定を追加できます。

[user]
    name = you_name
    password = you_password
[credential]
    helper = store

そうするとusernamepasswordの入力を求められることはなくなります。

8
Xiaorong Liao

これは安全な解決策ではないことを私は知っています、しかし時々あなたはただ他のものをインストールすることなく - 単純な解決策を必要とします。そして 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はこのユーザー+パスワードを使用します。

7
bebbo

アカウントパスワードの代わりに認証トークンを使用する必要があります。 GitHub設定/アプリケーションに移動してから、個人用アクセストークンを作成してください。トークンは、パスワードと同じ方法で使用できます。

このトークンは、ユーザーがプロジェクトの作業にアカウントのパスワードを使用できないようにするためのものです。新しいトークンの作成や古いトークンの取り消しなどの管理作業を行うときにのみパスワードを使用してください。


ユーザーにGitHubアカウントへの完全なアクセスを許可するトークンまたはパスワードの代わりに、プロジェクト固有のデプロイメントキーを使用して単一のプロジェクトリポジトリへのアクセスを許可することができます。通常の認証情報を使用して他のGitアカウントまたはプロジェクトにアクセスできる場合は、Gitプロジェクトが次の手順でこの異なるキーを使用するように設定できます。

  1. デプロイメントキー用のHostIdentityFile、おそらくUserKnownHostsFile、そしておそらくUserを含むSSH設定ファイルを書きます(私はあなたはそれを必要としないと思いますが)。
  2. SSHラッパーのシェルスクリプトを書いて、それは実質的にssh -F /path/to/your/config $*です。
  3. 通常のGitコマンドの前にGIT_SSH=/path/to/your/wrapperを付けます。ここでgit remote(Origin)は[email protected]:user/project.gitフォーマットを使わなければなりません。
6
minghua

セキュリティのために認証情報を使用することをお勧めしますが、キャッシュを使用してしばらくの間それを保持することができます。

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

認証情報は3600秒間保存されます。

6

二要素認証 を使っているのであれば、状況は少し異なります。私は他のところで良い答えを見つけられなかったので、私は多分私が後でそれを見つけることができるようにここでそれをつけるでしょう。

二要素認証を使用している場合は、ユーザー名/パスワードを指定してもうまくいきません - アクセスが拒否されます。しかし、アプリケーションアクセストークンを使用し、それをキャッシュするためにGitの認証情報ヘルパーを使用することができます。関連リンクは次のとおりです。

私がこれを見た場所を覚えているわけではありませんが、あなたがあなたのユーザ名を尋ねられたとき - それはあなたがアプリケーションアクセストークンを固執する場所です。その後、パスワードを空白のままにします。それは私のMac上で動作しました。

5
JnBrymn

通常あなたはこのようなリモート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)
4
Nayagam

私はWindows 10を使っています

git config --global credential.helper wincred
3
Mostafa Nawara

gitcredentials(7)マニュアルページから回答を得ました。私の場合は、私のWindowsインストールには資格キャッシュがありません。私はcredentials-storeを使います。

Credential-storeを使用した後、ユーザー名/パスワードは[ユーザーフォルダー] /。git-credentialsファイルに保存されます。ユーザー名/パスワードを削除するには、ファイルの内容を削除するだけです。

3
Mike Lin

作曲家のドキュメント メンション あなたが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の負荷の増加に関する最後の手段となるはずです。

2
sebastianwagner

また、 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
2
A-patel-guy