最近、リポジトリを GitHub の https:// に同期するように切り替えましたが (ファイアウォールの問題のため)、毎回パスワードを要求されます。
毎回認証する代わりに、資格情報をキャッシュする方法はありgit push
ますか?
最近、リポジトリを GitHub の https:// に同期するように切り替えましたが (ファイアウォールの問題のため)、毎回パスワードを要求されます。
毎回認証する代わりに、資格情報をキャッシュする方法はありgit push
ますか?
Git 1.7.9 (2012 年リリース) 以降、Git には、HTTP / HTTPS で常にパスワードを入力する必要がないようにする、資格情報ヘルパーと呼ばれるきちんとしたメカニズムがあります。
次の資格情報ヘルパーのいずれかを使用できます。
git config --global credential.helper cache
credential.helper キャッシュ値は、 Git に、特定の時間の間、パスワードをメモリにキャッシュしておくように指示します。デフォルトは 15 分ですが、次の方法でより長いタイムアウトを設定できます。
git config --global credential.helper "cache --timeout=3600"
キャッシュを 1 時間設定するか、次のようにします。
git config --global credential.helper "cache --timeout=86400"
1日。必要に応じて、資格情報を永続的に保存することもできます。以下の他の回答を参照してください。
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
Git for Windows 2.7.3 以降( 2016 年 3 月):
git config --global credential.helper manager
Linuxの場合、(2011 年に) gnome-keyring
(または KWallet などの他のキーリング実装) を使用します。
現在 (2020 年)、それは (Linux 上で)
sudo dnf install git-credential-libsecret
git config --global credential.helper /usr/libexec/git-core/git-credential-libsecret
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
次のように git-credential-storeを使用して、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
ユーザー資格情報を HTTPS URL に格納する簡単で昔ながらの方法があります。
https://user:password@github.com/...
でURLを変更できますgit remote set-url <remote-repo> <URL>
このアプローチの明らかな欠点は、パスワードをプレーン テキストで保存する必要があることです。ユーザー名 ( https://user@github.com/...
) を入力するだけで、少なくとも手間が半分になります。
SSH に切り替えるか、GitHub クライアント ソフトウェアを使用することをお勧めします。
最初にヘルパーをダウンロードする必要があることはすぐにはわかりませんでした。Atlassian の Permanently authenticationing with Git repositoriesで credential.helper のダウンロードを見つけました。
見積もり:
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トランスポートに使用しているネットワーク ライブラリによって異なる場合があります。
Git Credential Manager (GCM) プラグインを使用できます。現在、GitHub によって管理されています。良い点は、パスワードがプレーン テキストとしてではなく、Windows 資格情報ストアに保存されることです。
プロジェクトのリリース ページにインストーラーがあります。これにより、資格情報マネージャーが組み込まれた公式バージョンのGit for Windowsもインストールされます。これにより、GitHub (およびその他のサーバー) の2 要素認証が可能になります。また、最初にログインするためのグラフィカル インターフェイスがあります。
Cygwin ユーザー (または Windows 用の公式 Git を既に使用しているユーザー) の場合は、手動インストールを好むかもしれません。リリース ページから zip パッケージをダウンロードします。パッケージを解凍し、install.cmd
ファイルを実行します。これにより、~/bin
フォルダーにインストールされます。(~/bin
ディレクトリが PATH にあることを確認してください。) 次に、次のコマンドを使用して構成します。
git config --global credential.helper manager
その後、Git はgit-credential-manager.exe
任意のサーバーへの認証時に を実行します。
マークが言ったようにパスワードをプレーンテキストで保存したくない場合は、プッシュとは異なる GitHub URL をフェッチに使用できます。構成ファイルの の下[remote "origin"]
:
url = git://github.com/you/projectName.git
pushurl = git@github.com:you/projectName.git
少なくともオープン ソース プロジェクトでは、プッシュ時にパスワードを要求しますが、フェッチ時には要求しません。
独自の個人用 API トークン( OAuth ) を作成し、通常の資格情報を使用するのと同じ方法で使用できます (at: /settings/tokens
)。例えば:
git remote add fork https://4UTHT0KEN@github.com/foo/bar
git push fork
.netrc
もう 1 つの方法は、~/.netrc
( _netrc
Windows の場合) でユーザー/パスワードを構成することです。
machine github.com
login USERNAME
password PASSWORD
HTTPS の場合は、次の行を追加します。
protocol https
HTTPSを使用しているときにGitHub パスワードを Git にキャッシュするには、クレデンシャル ヘルパーを使用して、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 なしで使用します)
そして-出来上がり-gitはこのユーザーとパスワードを使用します。
セキュリティのために資格情報を使用することをお勧めしますが、キャッシュを使用してしばらくの間保持することができます。
git config --global credential.helper cache
git config credential.helper 'cache --timeout=3600'
資格情報は 3600 秒間保存されます。
また、 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