Gitプッシュにはユーザー名とパスワードが必要


1436

GitHubアカウントからPCにGitリポジトリのクローンを作成しました。

PCとラップトップの両方で作業したいが、1つのGitHubアカウントで作業したい。

PCを使用してGitHubをプッシュまたはプルしようとすると、ユーザー名とパスワードが必要になりますが、ラップトップを使用しているときは必要ありません。

とやり取りするたびにユーザー名とパスワードを入力したくありません  origin。ここで何が欠けていますか?


1
はい、でもどうしたらいいですか?keygenを他に何を生成しましたか?
TooCooL 2011

1
Githubアカウント(github.com/account/ssh)でpubkeyを登録し、適切なユーザー名を使用するようにSSHクライアントを構成する必要があります。
jwodder

1
私はそれをすべて行いましたが、それでもユーザー名とパスワードが必要です!1台のアカウントを2台のPCで使用できますか?
TooCooL 2011

1
この質問は非常によく、このためのすべてのオプションを説明します。stackoverflow.com/questions/5343068/...
フォード

2
もうsshに切り替える必要はありません。HTTPSでも可能です。私の答えを確認してください。
Varun Achar 2013

回答:


1960

一般的な原因は、SSHではなくデフォルト(HTTPS)を使用して複製することです。これを修正するには、リポジトリに移動して[クローンまたはダウンロード]をクリックし、URLフィールドの上にある[Use SSH]ボタンをクリックして、次のようにオリジンリモートのURLを更新します。

git remote set-url origin git@github.com:username/repo.git

これは、GitHub:リモートURLをHTTPSからSSHに切り替えるで説明されています


61
URLを変更する方法を理解するには、こちらにアクセスしてください:stackoverflow.com/a/2432799/60488(ネタバレ:git remote set-url origin git://new.url.here
Johan Kool

136
(私のような)セキュリティ制限のためにsshを使用できない場合は、次のようにできますgit remote set-url origin https://name:password@github.com/repo.git (ここのコメントから抽出)
Bruno Berisso 2013年

134
HTTPSを使用したクローン作成がよくある間違いなのはなぜですか?GitHubはHTTPSの使用を推奨しています。
デニス

8
デフォルトでは@smftreですが、ヘルパーを使用して認証情報をキャッシュできます
デニス

28
Permission denied (publickey)このガイドの使用を修正:help.github.com/articles/generating-ssh-keys
voltrevo 2014年

386

Gitリポジトリでの永続的な認証

次のコマンドを実行して、資格情報のキャッシュを有効にします

$ git config credential.helper store
$ git push https://github.com/owner/repo.git

Username for 'https://github.com': <USERNAME>
Password for 'https://USERNAME@github.com': <PASSWORD>

また、キャッシュの有効期限も指定する必要があります。

git config --global credential.helper 'cache --timeout 7200'

資格情報のキャッシュを有効にすると、7200秒(2時間)キャッシュされます。


リモートのURLを変更する必要がある場合もあります。git remote set-url origin https://git@github.com/<owner>/<repo>.git これは2FAでも機能します
Bron Davies

14
これは受け入れられる答えになるはずです。それは質問に正確に答えます。
アブラハムTS

セキュリティのため、ubuntuファイルから7200以降に自動的に削除されますか?
usama

または12時間で43,200。1日に1回ログインします。一部の人にとってはそれがより合理的かもしれません。
Urasquirrel

ちょうどこれを試した-得た:fatal: protocol 'https' is not supported
ジョエル

134

私は同じ問題に遭遇しました、そして私が見つけた最も簡単な解決策はHTTPSの代わりにSSH URLを使用することでした:

ssh://git@github.com/username/repo.git

そしてこれではありません:

https://github.com/username/repo.git

とではなく、SSHキーだけで検証できるようにusernameなりましたpassword


1
問題を修正する最も簡単な方法は、リモートオリジンURLを編集することだけです。それで全部です。できました。ありがとう!
JOM

1
これは私のために働いたが、最初に私はこれに対処するために必要な:stackoverflow.com/questions/2643502/...を
シュリダールSarnobatを

SSHキーを設定するには、help.github.com
articles /

120

SSHに変更する以外に、パスワードを平文で入力することを気にしない場合は、HTTPSを使い続けることもできます。これをあなたの中に入れてください、~/.netrcそしてそれはあなたのユーザー名/パスワードを要求しません(少なくともLinuxとMacでは):

machine github.com
       login <user>
       password <password>

追加(VonCの2番目のコメントを参照):Windowsではファイル名は%HOME%\_netrcです。

暗号化する場合は、VonCの最初のコメントも読んでください。

Git 1.7.10以降を使用している場合に使用できるもう1つの追加(user137717のコメントを参照)。

認証ヘルパーを使用してGitHubパスワードをGitにキャッシュします

HTTPSを使用してGitHubリポジトリのクローンを作成している場合は、資格情報ヘルパーを使用して、GitHubと通信するたびにGitHubのユーザー名とパスワードを記憶するようGitに指示できます。

これはLinux、Mac、Windowsでも機能します。


3
ええ、それはLinuxで動作しますが、Windowsのgitbashでは動作しません。
Dielsonセールス2013

3
@dolmen意味はわかりますが、パスワードをクリアテキストで入力することを心がけている場合は、...暗号化できます;)stackoverflow.com/a/18362082/6309を参照してください。それはのGithubの2要素認証(2FA)とも互換性がある:stackoverflow.com/a/18607931/6309
VonC

3
@Salesは、ファイルを%HOME%\_netrc(ではなく~/.netrc)呼び出した場合、DOSセッションまたはWindowsのgit bashから完全に機能します。そのファイルを暗号化するには、stackoverflow.com / a / 18362082/6309も参照してください。
VonC 2013年

1
これは、特にVPN経由でgitを使用するLinuxで非常にうまく機能します。
エヴァンHu 14

3
クリアテキストで入力したり、暗号化したりする必要はありません。ヘルパーユーティリティはそれをキャッシュし、設定に30秒かかります。help.github.com/articles/caching-your-github-password-in-git/...
user137717

86

以前の答えで混乱している初心者のために、あなたは行うことができます:

git remote -v

のようなもので応答します

origin    https://yourname@github.com/yourname/yourrepo.git (fetch)
origin    https://yourname@github.com/yourname/yourrepo.git (push)

次に、他の多くの人が提案したコマンドを実行できますが、これで上からyournameとyourrepoがわかったのでyourname/yourrepo.git、上からカットアンドペーストするだけです。

git remote set-url origin git@github.com:yourname/yourrepo.git

1
私はこれを試しました。paraphrase毎回お願いします。設定しませんでした
サマヨ14

代わりに何が起こりyourrepoますか?
Raphi

2
@Raphiの実行git remote -vと結果の確認
Davide

1
他の回答はこのアドバイスの前に付けるべきです。
ベネットブラウン

57

あなたはSSHを使用していて、自分の秘密鍵がパスフレーズで暗号化されている場合、あなたはまだあなたがGitリポジトリとネットワーク運用を行う際に、秘密鍵のパスフレーズ/パスワードを入力するように求められますようにpushpullfetch

ssh-agentを使用して秘密鍵のパスフレーズ/パスワード資格情報を保存します

毎回パスフレーズを入力する必要がないようにする場合は、を使用ssh-agentして、ターミナルセッションごとに秘密鍵のパスフレーズ認証情報を保存できます。これについては認証エージェントへの接続を開けませんでした

$ eval `ssh-agent -s`
$ ssh-add

Windows msysgit Bashでは、の出力を評価ssh-agentする必要がありますが、他の開発環境やオペレーティングシステムでも同じようにする必要があるかどうかはわかりません。

ssh-add.sshと呼ばれるホームフォルダーで秘密キーを検索しますid_rsa。これはデフォルト名ですが、ファイルパスを別の名前のキーに渡すことができます。

エージェントを殺す

ターミナルセッションが終了したらssh-agent、killフラグを使用してシャットダウンできます-k

$ ssh-agent -k

ssh-agentマニュアルで説明されているように:

-k

現在のエージェントを強制終了します(SSH_AGENT_PID環境変数で指定)。

オプションのタイムアウト

また、次のようなオプションのタイムアウトパラメータを取ることもできます。

$ ssh-add -t <timeout>

どこ<timeout>フォーマットである<n>hため<n>時間、<n>mのための<n>分、というように。

ssh-agentマニュアルによると:

-t life

エージェントに追加されるIDの最大存続時間のデフォルト値を設定します。存続時間は、秒単位で、またはsshd_config(5)で指定された時間形式で指定できます。ssh-add(1)を使用してIDに指定された有効期間は、この値をオーバーライドします。このオプションがない場合、デフォルトの最大存続期間は永久です。

その他の時間形式については、このページを参照してください

Cygwinユーザーに対するセキュリティ警告

Cygwinユーザーは、Cygwinでssh-agentを使用する場合の潜在的なセキュリティリスクに注意する必要があります

Cygwin 1でのssh-agentの潜在的な危険性を認識する必要があります。ただし、ローカルのnetstatとリモートのポートスキャンでは、/ tmp / ssh-fooで指定されたポートに誰もがアクセスできるようには見えません...?

[1]: http://www.cygwin.com/ml/cygwin/2001-01/msg00063.html

そして引用されたリンクで

ただし、CygwinのUnixドメインソケットは根本的に安全ではないため、Cygwinでのssh-agentの使用はお勧めしません

Cygwinでssh-agentを実行すると、/tmp/ssh-$USERNAME/ディレクトリにAF_UNIXソケットが作成されます。Cygwinでは、AF_UNIXソケットはAF_INETソケットを介してエミュレートされます。/tmp/ssh-$USERNAME/agent-socket-*メモ帳でファイルを調べると、簡単に確認できます。次のようなものが表示されます

!<socket >2080

その後、実行netstat -aして驚きます!ポート2080をリッスンしているプログラムがあります。これはssh-agentです。sshがサーバーからRSAチャレンジを受信すると、対応する/tmp/ssh-$USERNAME/agent-socket-*(この場合はCygwinの下で、つまりへの接続が開かれることを意味しますlocalhost:2080)を参照し、ssh-agentにRSAチャレンジを秘密鍵で処理するように要求します。単にssh-agentから受け取った応答をサーバーに渡します。

Unixでは、プログラムがAF_UNIXソケットにアクセスしようとするとUnixカーネルがアクセス許可をチェックするため、このようなシナリオは問題なく機能します。ただし、AF_INETソケットの場合、接続は匿名です(「安全でない」と読みます)。Cygwin ssh-agentを実行していると想像してください。悪意のあるハッカーは、ボックスをポートスキャンし、ssh-agentが使用する開いているポートを見つけ、SSHサーバーへの接続を開き、そこからRSAチャレンジを受信し、見つけた開いているポートを介してssh-agentに送信し、受信します。 RSA応答、SSHサーバーに送信し、出来れば、彼/彼女はあなたとしてあなたのサーバーに正常にログインしました。


素敵で詳細に聞こえます。私はの世話をしたHTTPS資格ヘルパー、そしてあなたは、SSH接続の世話をしました!+1
VonC 2013

49

ソース:セットアップGit

次のコマンドは、パスワードをしばらくの間メモリに保存します(Git 1.7.10以降の場合)。

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

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

2
私は、複数の資格情報をキャッシュするために(すべてのパスワードを覚える必要がない)、「netrc」資格情報ヘルプ(stackoverflow.com/a/18362082/6309)を好みます。ただし、Windowsでメモリキャッシュを使用する場合は、winstore(stackoverflow.com/a/15310274/6309
VonC

9
これがこれまでのところ私見の最良の答えです。
Chiel ten Brinke、2014

35

Gitプル&プッシュにhttpsを使用する場合remote.origin.urlは、プロジェクトを構成するだけで、プッシュするたびにユーザー名(またはパスワード)を入力する必要がなくなります。

設定方法remote.origin.url

URL形式:
    https:// {username:password @} github.com/ {owner} / {repo}

URLのパラメータ:

* username 
オプション、必要なときに使用するユーザー名。
認証、 指定した場合、認証が必要なときにユーザー名を再入力する必要はありません。 メールを使用しないでください。「@」のないユーザー名を使用してください。使用しないと、URLを正しく解析できません。 *パスワード オプション、認証が必要なときに使用するパスワード。 指定した場合、認証が必要なときにパスワードを再入力する必要はありません。 ヒント: この値はプレーンテキストとして保存されるため、セキュリティ上の理由から、このパラメーターを指定しないでください。 * 例えば git config remote.origin.url https://eric@github.com/eric/myproject

@Update-使用 ssh

セットアップ手順が少し複雑sshですが、プロトコルを使用することは、よりも優れたソリューションだと思いますhttps

大まかな手順:

  • コマンドを使用してssh鍵を作成します(例:ssh-keygenLinux、Windowsではmsysgit同様のコマンドを提供)。
  • ローカルマシンの秘密鍵を適切な場所に保管し~/.sshます。そして、それをssh-addコマンドを介してsshエージェントに追加します。
  • 公開鍵をGitサーバーにアップロードします。
  • remote.origin.urlGitリポジトリをsshスタイルに変更します。たとえば、git@gitlab.com:myaccount/myrepo.git
  • その後、プルまたはプッシュするときに、ユーザー名やパスワードを入力する必要はありません。

チップ:

  • sshキーにパスフレーズがある場合、デフォルトでは、マシンを再起動するたびにキーを最初に使用するときにキーを入力する必要があります。

@Update- httpssshプロトコルを切り替えます。

単に変更remote.origin.urlするだけで十分ですが、repo_home/.git/config直接編集して値を変更することもできます(viLinuxでの使用など)。

通常、プロトコルごとに行を追加し、を使用してそれらの1つをコメント化し#ます。

例えば

[リモート「元」]
        url = git@gitlab.com:myaccount / myrepo.git
        #url = https://myaccount@gitlab.com/myaccount/myrepo.git
        フェッチ= + refs / heads / *:refs / remotes / origin / *

よろしいですのhttp [s]のベースURLサポートのユーザー名の拡張?マニュアルでgit-fetch(1)は、git/ sshベースのURL についてのみ言及しています。

@plmdayはい、私はそれを使用しています、私のgitバージョンは1.8.2.3と1.8.4です。これについてより高いバージョンが変更されるかどうかはわかりません。
Eric Wang

1
(HTTPSを使用している場合でも)URLにパスワードを入力することは、あなたとリポジトリの間のすべてのユーザーに表示されることを意味します。
ウィリアム

3
いいえ、パスワードを入力してhttps://username:password@github.com/も安全です。stackoverflow.com/questions/4980912/…を
スローハンド

1
そして、これが私が探していたものです(完全な自動化のため)
ジョシュア

16

GitHubパスワードをGitにキャッシュできます。

GitHubの公式ドキュメントの指示に従ってください。

上記のリンクからの指示に従うと、毎回ユーザー名/パスワードを入力しなくても、リポジトリにプッシュ/プルできます。


5
これがここでの最良の答えであり、受け入れられるべきIMOです
TheZuck

1
同意し、公式文書を引用する回答を優先する必要があります。私は喜んで彼らの指示に従い、標準的な慣習を使うことを好みます。
johnnieb 2017年

10

ここに別のオプションがあります:

書く代わりに

git push origin HEAD

あなたは書くことができます:

git push https://user:pass@yourrepo.com/path HEAD

明らかに、ほとんどのシェルでは、これによりパスワードが履歴にキャッシュされるため、それを覚えておいてください。


1
Bashでは、1つ以上の先行スペースを追加すると、通常、履歴から除外されます。ただし、Git Bashにはありません。
Peter Mortensen

これは単に私のために働いた:)
Naveen Kumar V

9

私のために働いたのは、編集.git/configして使用することでした

[remote "origin"]
        url = https://<login>:<password>@gitlab.com(...).git

言うまでもありませんが、これはパスワードを安全に保存する方法ではありませんが、これが問題にならない環境/ケースがあります。


6

SSHキーまたは.netrcファイルが機能しなかった場合、もう1つの単純ですが安全性の低いソリューションは、git-credential-store-資格情報をディスクに保存するヘルパーです。

git config --global credential.helper store

デフォルトでは、資格情報はファイルに保存されます~/.git-credentials。作成され、書き込まれます。

このヘルパーを使用すると、パスワードは暗号化されずにディスクに保存され、ファイルシステムの権限によってのみ保護されます。これが許容できるセキュリティのトレードオフではない場合。


5

同じ問題がありました。

.git/configプロジェクトからファイルを変更しました

url = https://github.com/<your-user-here>/<your-repo-here>

url = git@github.com:<your-user-here>/<your-repo-here>

設定中のGitプロファイルにSSH公開鍵を追加しました。

SSH公開鍵の場合:

cat ~/.ssh/id_rsa.pub

1
cat ~/.ssh/id_rsa.pubrsaキーを取得し、git Webポータル設定に貼り付けます。
Anupam Maurya

4

HTTPSの更新:

GitHubは、HTTPSを使用しているときに資格情報を保存するWindows用の新しいプログラムを開始しました。

使用するには:

  • ここからプログラムをダウンロード

  • プログラムを実行すると、.gitconfigファイルが編集されます。.gitconfigそれらがいくつかある場合に備えて、正しく編集されているかどうかを再確認してください。正しいものを編集しなかった場合は、以下を追加してください.gitconfig

    [credential]
        helper = !'C:\\Path\\To\\Your\\Downloaded\\File\\git-credential-winstore.exe'
    

    後の改行に注意してください[credential]。必須です。

  • コマンドラインクライアントを開いて、git push origin master一度試してください。パスワードの入力を求められたら、パスワードを入力すれば完了です。パスワードが保存されました!


おかげでVarun、魅力を発揮しました!
ジョイ

4

Windows Gitユーザーの場合、を実行した後git config --global credential.helper storeもパスワードの入力を求められる場合は、このコマンドを使用して、構成ファイルが書き込まれている場所を確認することをお勧めします。

git config --list --show-origin

私の場合、構成ファイル「C:\ Program Files \ Git \ mingw64 \ etc \ gitconfig」を手動で編集し、次のテキストを追加した後、うまくいきました。

[credential]
    helper = store

3

基本的に2つのオプションがあります。

両方のマシンで同じユーザーを使用する場合は、.pubキーをPCにコピーする必要があるため、GitHubはあなたが同じユーザーであることを認識します。

PC用に新しい.pubファイルを作成し、マシンを別のユーザーとして扱いたい場合は、GitHub Webサイトで新しい.pubファイルを登録する必要があります。

それでも機能しない場合は、sshが正しく設定されておらず、sshがキーの場所を見つけられないことが原因である可能性があります。試す

ssh -vv username@github.com

SSHが失敗する理由の詳細を取得する。


3

Git設定ファイルを直接更新する(派手なコマンドを覚えたくない場合):

.git/configお気に入りのテキストエディタでファイルを開きます。これは、クローンしたフォルダーまたは実行git initしたリポジトリーにあります。そのリポジトリーに移動します。.gitは隠しフォルダです。Ctrl+ を押すとH、隠しフォルダが表示されます(ls -aターミナル内)。

以下は.git/configファイルのサンプルです。これらの行をコピーして貼り付け、Git情報でこれらの行を更新してください。

[user]
        name = Tux
        email = tux@gmail.com
        username = happy_feet

[remote "origin"]
        url = https://github.com/happy_feet/my_code.git
        fetch = +refs/heads/*:refs/remotes/origin/*

SSH用に次の形式でURL部分を変更します。

url = git@github.com:happy_feet/my_code.git

上記の形式は、GitHubやBitbucketなどのさまざまなGitリモートサーバーで変更されません。バージョン管理にGitを使用している場合も同じです。):

注:リモートGitリポジトリに接続するSSHの方法では、Gitリモートサーバー(GitHubやBitbucketなど)に公開SSHキーを追加する必要があります。設定ページでSSHキーを検索してください

SSH鍵の生成方法については、SSH鍵の 作成を参照してください。


2

これは私のために働いたものです:

git remote set-url origin https://username@github.com/username/reponame.git

例:

git remote set-url origin https://jsmith@github.com/jsmith/master.git

ありがとう、私はあなたの答えに
賛成票を投じ

2

あなたは2つのステップを実行する必要があります-

  1. git remote remove origin
  2. git remote add origin git@github.com:NuggetAI/nugget.git

Git URLがSSH URLであり、HTTPS URLではないことに注意してください...ここから選択できます。

ここに画像の説明を入力してください


2

SSHではなくHTTPSのクローンを作成していて、プル、プッシュ、フェッチ時にユーザー名とパスワードのプロンプトで問題が発生している場合。この問題はUBUNTUで簡単に解決できます

手順1:ルートディレクトリに移動する

cd ~/

.git-credentialsファイルを作成する

このコンテンツをあなたusename passwordと一緒にそのファイルに追加してくださいgithosting URL

https://user:pass@example.com

次に、コマンドを実行します

git config --global credential.helper store

これで、手間をかけずにレポジトリからすべての詳細をプルプッシュおよびフェッチできるようになります。


0

WindowsでGit(たとえば、Git Bash)を使用している場合(およびHTTPSからSSHに切り替えたくない場合)、Git Credential Manager for Windowsも使用できます。

このアプリケーションは、ユーザー名とパスワードを保持します...


0

多くのユーザーが言っているように、GitリポジトリのURLをHTTPSからSSHに変更するだけです。

マシンでSSHキーを生成していない場合は、SSHキーを生成する必要があります。

追加情報として、この変更を行った後も同じエラーが発生していました。

アクセス拒否。

私の場合、問題はWindowsシェルを使用してnghコマンドを実行していたことでした。このコマンドは、SSHフレーズを要求するプロンプトを開く必要があり、Windowsシェルはこれらの種類のプロンプトを開かないため、認証は失敗しました。

したがって、Gitシェルを開いてnghコマンドを実行し、SSHフレーズを要求するたびにプロンプ​​トに「voilà」と入力するだけで問題なく動作しました。


0
    # create the company identity file
    ssh-keygen -t rsa -b 4096 -C "first.last@corp.com"
    # save private key to ~/.ssh/id_rsa.corp, 
    cat ~/.ssh/id_rsa.corp.pub # copy paste this string into your corp web ui security ssh keys

    # create your private identify file
    ssh-keygen -t rsa -b 4096 -C "me@gmail.com"
    # save private key to ~/.ssh/id_rsa.me, note the public key ~/.ssh/id_rsa.me.pub
    cat ~/.ssh/id_rsa.me.pub # copy paste this one into your githubs, private keys

    # clone company internal repo as follows
    GIT_SSH_COMMAND="ssh -i ~/.ssh/id_rsa.corp -o UserKnownHostsFile=/dev/null -o StrictHostKeyChecking=no" \
    git clone git@git.in.corp.com:corp/project.git

    export git_msg="my commit msg with my corporate identity"
    git add --all ; git commit -m "$git_msg" --author "MeFirst MeLast <first.last@corp.com>"
    GIT_SSH_COMMAND="ssh -i ~/.ssh/id_rsa.corp -o UserKnownHostsFile=/dev/null -o StrictHostKeyChecking=no" \
    git push 

    # clone public repo as follows
    GIT_SSH_COMMAND="ssh -i ~/.ssh/id_rsa.corp -o UserKnownHostsFile=/dev/null -o StrictHostKeyChecking=no" \
    git clone git@github.com:acoolprojectowner/coolproject.git

    export git_msg="my commit msg with my personal identity"
    git add --all ; git commit -m "$git_msg" --author "MeFirst MeLast <first.last@gmail.com>"
    GIT_SSH_COMMAND="ssh -i ~/.ssh/id_rsa.me -o UserKnownHostsFile=/dev/null -o StrictHostKeyChecking=no" \
    git push 

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