git pushのたびにユーザー名とパスワードを指定しないようにするにはどうすればよいですか?


317

git pushはリモートGitリポジトリーに作業しています。

すべてのpush入力に私を促すメッセージが表示されますusernamepassword。すべてのプッシュでそれを回避したいのですが、それを回避するように構成するにはどうすればよいですか?


6
答えはここにあります:stackoverflow.com/questions/6565357/...
kbdjockey

3
長い話を短く:githubのために、ただ、これらの二つのリンク従うhelp.github.com/articles/generating-ssh-keys help.github.com/articles/changing-a-remote-s-url
JRunの

bitbucketについては、このリンク
JDP

回答:


346

1. SSHキーを生成する

Linux / Mac

ターミナルを開いてSSH鍵を作成します。

cd ~                 #Your home directory
ssh-keygen -t rsa    #Press enter for all values

Windowsの場合

(コミットプログラムが証明書/秘密鍵と公開SSH鍵を使用できる場合にのみ機能します)

  1. Putty Genを使用してキーを生成する
  2. 鍵をオープンSSH鍵としてエクスポートする

ここでウォークスルー、上記のステップのためのパテGENには、

2. SSH鍵をリモートリポジトリに関連付ける

この手順は、リモコンの設定方法によって異なります。

  • GitHubリポジトリであり、管理者権限がある場合は、設定に移動して[SSHキーを追加]をクリックします。の内容を~/.ssh/id_rsa.pub「キー」というラベルの付いたフィールドにコピーします。

  • リポジトリが他の誰かによって管理されている場合は、管理者にを付与してくださいid_rsa.pub

  • リモートリポジトリが管理されている場合は、次のコマンドを使用できます。

    scp ~/.ssh/id_rsa.pub YOUR_USER@YOUR_IP:~/.ssh/authorized_keys/id_rsa.pub

3.リモートURLをSSHをサポートするフォームに設定します1

上記の手順を実行してもパスワードプロンプトが表示される場合は、リポジトリのURLが次の形式であることを確認してください

git+ssh://git@github.com/username/reponame.git

とは対照的に

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

レポURLを表示するには、次のコマンドを実行します。

git remote show origin

次の方法でURLを変更できます。

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

[1]このセクションには、Eric Pの回答が組み込まれています


3
ubuntuでステップ1とステップ2を実行しましたが、u_id passwdを要求されます。私も実行しました:ssh -T git@github.com。まだ同じ。何をすべきか?
Radhika、2015年

4
@Rads エリックPによる他の答えを試しましたか?
yo '

2
@dialex彼はリモートgitリポジトリを管理する人を意味しました。
selalerer

5
git remote set-url origin git + ssh://git@github.com/username/reponame.gitこのコマンドは私に役立ちます。
人工知能

2
これは私のために働いたgit remote set-url origin git@github.com:/username/projectname.git
カート

181

Gitリポジトリによる永続的な認証、

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

$ git config credential.helper store
$ git push https://github.com/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時間)キャッシュされます。

注:暗号化されていないパスワードをローカルディスクに保存する資格情報ヘルパー。


4
ありがとう。configコマンドの機能について教えてください。なぜレポジトリに初めてプッシュしたときに、パスワードを要求されないのでしょうか。
HelloWorldNoMore

1
@vivoconunxinoおそらく本質的に安全ではないためです。gitマンページから:「このヘルパーを使用すると、パスワードが暗号化されずにディスクに保存され、ファイルシステムのアクセス許可によってのみ保護されます。」
cmaster-モニカを2017年

15
この回答には、store暗号化されていないディスクにパスワードを保存する資格情報ヘルパーに関する警告がありません。
cmaster-モニカを2017年

1
@DavidRTribble:キャッシュに設定しますか?または、関連ファイルを削除します。git
serv-inc

1
@DavidRTribble:より良い:git config --unset credential.helper
serv-inc

116

SSHキーがすでに設定されていて、それでもパスワードプロンプトが表示される場合は、リポジトリのURLが次の形式であることを確認してください

git+ssh://git@github.com/username/reponame.git

とは対照的に

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

レポURLを表示するには、次のコマンドを実行します。

git remote show origin

次のgit remote set-urlようにしてURLを変更できます:

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

これはgit init、ローカルで使用した後、GitHub Webサイトの新しいリポジトリからリモートを追加した後にプッシュしようとした後の問題を修正したものです。
sheldonkreger 2014

1
なぜこれが受け入れられた回答の一部ではないのか分かりません。ありがとう!
jwalk

1
承認された回答は、実際に承認された回答とこの回答で構成されている必要があります。
Puce

3
「git + ssh://」を省略してそのまま使用できますgit@github.com/username/reponame.git
Ivan Shulev

1
@IvanShulev私は最初にgit + sshなしで試してみましたが機能しませんでした
Antonello

40

--repogit pushコマンドのオプションを使用するだけです。このような:

$ git push --repo https://name:password@bitbucket.org/name/repo.git

37
または、デフォルトでこれを設定できますgit remote set-url origin https://name:password@github.com/repo.git
ACyclic

name@github.com/....git毎回パスワードを気にする必要がない場合は、URLを単に機能するように設定することにも注意します。
火曜日の

githubユーザーの場合git push --repo https://github.com/Username/repo .git 拡張子なしでも機能します
Pe Dro

24

無期限に保存

git-credential-storeを使用して

git config credential.helper store

これは、ファイルシステム非暗号化パスワードを保存します

このヘルパーを使用すると、パスワードが暗号化されずにディスクに保存され、ファイルシステムのアクセス許可によってのみ保護されます。これが許容できるセキュリティのトレードオフではない場合は、git-credential-cacheを試すか、オペレーティングシステムが提供する安全なストレージと統合するヘルパーを見つけてください。

タイムアウトあり

デフォルトでパスワードを15分間保存するgit-credential-cacheを使用します。

git config credential.helper cache

別のタイムアウトを設定するには、--timeout(ここでは5分)を使用します

git config credential.helper 'cache --timeout=300'

無期限の安全な保存(OS XおよびWindows)

  • Macを使用している場合、Gitには「osxkeychain」モードが付属しており、システムアカウントに関連付けられている安全なキーチェーンに認証情報をキャッシュします。この方法では、資格情報がディスクに保存され、期限切れになることはありませんが、HTTPS証明書とSafariの自動入力を保存するのと同じシステムで暗号化されます。コマンドラインで次のコマンドを実行すると、この機能が有効になりますgit config --global credential.helper osxkeychain。キーチェーンアプリを使用して、認証情報をキーチェーンに保存する必要もあります。
  • Windowsを使用している場合は、「Git Credential Manager for Windows」と呼ばれるヘルパーインストールできます。これは、上記の「osxkeychain」ヘルパーに似ていますが、Windows資格情報ストアを使用して機密情報を制御します。それはで見つけることができhttps://github.com/Microsoft/Git-Credential-Manager-for-Windows。[私を強調する]

Windowsの場合は機能credential.helper cacheしません。それはあるはずですgit config --global credential.helper wincred
Paulo Merson

1
これは、httpsを使用する必要がある場合に役立ちます。sshを使用すると、サーバー上のgitがハングするため、SSHキーのオプションがありません。
Sridhar Sarnobat

8

私はhttps://github.com/org/repo.gitsshリンクの代わりにhttpsリンク()を使用していました。

git@github.com:org/repo.git  

切り替えで問題が解決しました!


6

ステップ1 -

以下のコマンドを使用してLinuxシステムにSSHキーを作成します

ssh-keygen -t rsa -b 4096 -C "your_email"

パスフレーズとファイル名を要求します(デフォルトは〜/ .ssh / id_rsa、〜/ .ssh / id_rsa.pubです)

ステップ2 -

ファイルを作成したら、公開鍵id_rsa.pubをgithubアカウントのsshセクションに追加します。

ステップ3-

マシンで、以下のコマンドを使用して秘密鍵id_rsaをssh-agentに追加します

ssh-add ~/.ssh/id_rsa 

ステップ4-

次のコマンドを使用して、リモートurl git@github.com:user_name / repo_name.gitをローカルのgit repoに追加します。

git remote remove origin
git remote add origin git@github.com:user_name/repo_name.git

それでおしまい。



5

Windowsオペレーティングシステムでは、代わりにこれを使用してください。これは私にとっては機能します。

https://{Username}:{Password}@github.com/{Username}/{repo}.git

例えば

git clone https://{Username}:{Password}@github.com/{Username}/{repo}.git

git pull https://{Username}:{Password}@github.com/{Username}/{repo}.git

git remote add origin https://{Username}:{Password}@github.com/{Username}/{repo}.git

git push origin master

5

上記のソリューションについて何度か指摘したかっただけです:

git config credential.helper store

この後、パスワードを要求する任意のコマンドを使用できます。押す必要はありません。(たとえば、プルすることもできます)その後、ユーザー名/パスワードを再度入力する必要はありません。


3

私はPavelが提案した答えを使用しましたが、それは私にとってはうまくいきました。私の違いは、リモートを次のように追加しているときにそれを行うことでした:git remote add (alias) https://(name:password)@github.com/(the remote address).git


3

以下のコマンドを実行すると、問題が解決しました。

git config --global credential.helper wincred

以下のgithubのドキュメントを参照してください:

https://help.github.com/articles/caching-your-github-password-in-git/

3

私の知る限り、2つの安全な方法がありますキーストアを使用して暗号化されたsshまたはpasswdです。

SSH

  1. githubにログインします。
  2. 訪問:https : //github.com/settings/keys ;
  3. 新しいSSHキー。
  4. cat ~/.ssh/id_rsa.pub、そこに貼り付け、名前を付けて保存します(そのようなファイルがない場合は、自分で生成しますssh-keygen -t rsa- すべてのプロンプトでEnterキーを押します)。
  5. ローカルリポジトリに移動し、リモートを更新しますgit remote set-url origin git+ssh://git@github.com/username/reponame.git-最初に確認できますgit remote -v);
  6. ここでtouch t; git add t; git commit -m "test"; git pushパスワードなしの世界を楽しんでください。

キーストアを使用してpasswd ENCRYPTED

git config --global credential.helper store他の人が言及したように使用する場合、暗号化されていないパスワードはプレーンテキストで保存されるため、~/.git-credentials安全ではありません。

暗号化してみてください

sudo apt-get install libgnome-keyring-dev
sudo make --directory=/usr/share/doc/git/contrib/credential/gnome-keyring
git config --global credential.helper /usr/share/doc/git/contrib/credential/gnome-keyring/git-credential-gnome-keyring

git config --global credential.helper store

この場合、を使用していhttps://git@github.com/username/reponame.gitます。


2

Windowsでの私の解決策:

  1. ディレクトリを右クリックしてプッシュし、「Git Bash Here」を選択します。
  2. ssh-keygen -t rsa (すべての値でEnterキーを押します)
  3. 端末をチェックしてください: Your public key has been saved in /c/Users/<your_user_name_here>/.ssh/id_rsa.pub
  4. 指定したファイルから公開鍵をコピーします。
  5. GitHubプロファイルに移動=>設定=> SSHおよびGPGキー=>新しいSSHキー=> SSHキーをそこに貼り付け=>保存

2

PCが安全であるか、パスワードのセキュリティを気にしない場合、これは非常に簡単に実現できます。リモートリポジトリがGitHubにありorigin、リモートリポジトリのローカル名であると仮定して、次のコマンドを使用します

git remote set-url --push origin https://<username>:<password>@github.com/<repo>

--pushフラグは、これがために、リポジトリのURLを変更し確実にgit pushコマンドのみ。(元の投稿で尋ねられた質問はgit pushコマンドのみに関するものです。プッシュ操作でのみユーザー名とパスワードを要求することは、GitHubのパブリックリポジトリの通常の設定です。GitHubのプライベートリポジトリでも、プルおよびフェッチ操作にはユーザー名とパスワードが必要です。 、したがって、プライベートリポジトリの場合は使用したくない--push flag...)

警告:これは本質的に安全ではありません:

  1. ISP、またはネットワークアクセスをログに記録している誰もが、URL内のプレーンテキストのパスワードを簡単に見ることができます。

  2. PCにアクセスした人は誰でも、を使用してパスワードを表示できますgit remote show origin

そのため、SSHキーの使用が受け入れられます。

SSHキーでも完全に安全ではありません。PCにアクセスできる人はだれでも、たとえば、リポジトリを破壊するプッシュを実行したり、さらに悪いことに、プッシュコミットでコードに微妙な変更を加えることができます。(プッシュされたすべてのコミットは明らかにGitHubで非常に目立ちます。しかし、誰かがコードを不正に変更したい場合--amendは、コミットメッセージを変更せずに以前のコミットを実行し、強制的にプッシュすることができます。これはステルスであり、実際には非常に困難です。 )

しかし、パスワードを明らかにすることはさらに悪いことです。攻撃者がユーザー名とパスワードを知った場合、自分のアカウントからのロック、アカウントの削除、リポジトリの完全な削除などを行うことができます。


または、単純さセキュリティのために、URLにはユーザー名のみを指定できるため、毎回パスワードを入力する必要git pushがありますが、毎回ユーザー名を入力する必要はありません。(私はこのアプローチが非常に好きです。パスワードを入力する必要があるgit pushので、毎回考えるのが一時停止になるのでgit push、偶然ではありません。)

git remote set-url --push origin https://<username>@github.com/<repo>

パスワードにがある場合@、それはgitサーバーの一部として@の後のパスワードを考えるコマンドを壊していますか?
Pranav Singh

パスワードに「@」が含まれている場合は、ご自分でご利用ください。パスワードを変更できますか?
radfast

サービスアカウント(個人ではない)を持つ継続的インテグレーションの自動化を行っていたため、パスワード変更のリクエストを上げる必要があります。現在、安全なログインにSSHキーを使用
Pranav Singh

1

これはすべて、gitがclone / pull / push / fetchコマンドでパイプを介して認証情報を送信するオプションを提供していないために発生します。credential.helperを提供しますが、ファイルシステムに格納するか、デーモンなどを作成します。多くの場合、GITの認証情報はシステムレベルの認証情報であり、それらを安全に保つための責任はgitコマンドを呼び出すアプリケーションにあります。確かに非常に危険です。

これは私が回避しなければならなかったものです。1. Gitバージョン(git --version)は1.8.3以上である必要があります。

GITクローン

クローンを作成するには、URLをhttp:// {myuser} @ {my_repo_ip_address} / {myrepo_name.git}の形式からhttp:// {myuser}:{mypwd} @ {my_repo_ip_address}に変更した後、「git clone URL」を使用します/{myrepo_name.git}

次に、次のセクションのように、パスワードのリポジトリを削除します。

パージ

さて、これはなくなっていたでしょう

  1. git remote originにパスワードを書き込んだ。「git remote -v」と入力して、損傷を確認します。パスワードなしでリモートオリジンURLを設定することにより、これを修正します。「git remote set_url origin http:// {myuser} @ {my_repo_ip_address} / {myrepo_name.git}」
  2. リポジトリの.git / logsにパスワードを書き込んだ。find .git / logs -exec sed -i 's / {my_url_with_pwd} // g' {} \;のようなUNIXコマンドを使用して、pwdのすべてのインスタンスを置き換えます。ここで、{my_url_with_pwd}はパスワード付きのURLです。URLにはスラッシュが含まれているため、2つのバックスラッシュでエスケープする必要があります。exの場合、URLはhttp:// kris:passs123@192.168.0.1/proj.git- > http:\\ / \\ / kris:passs123@192.168.0.1 \\ / proj.git

アプリケーションがJavaを使用してこれらのコマンドを発行する場合は、ランタイムの代わりにProcessBuilderを使用します。ランタイムを使用する必要がある場合は、単一のストリングを引数として取るものではなく、/ bin / bashおよび-cを引数としてストリング配列を引数として取るgetRunTime()。execを使用します。

GIT FETCH / PULL / PUSH

  1. git remote urlのパスワードを次のように設定します: "git remote set_url origin http:// {myuser}:{mypwd} @ {my_repo_ip_address} / {myrepo_name.git}"
  2. コマンドgit fetch / push / pullを発行します。パスワードの入力は求められません。
  3. 前のセクションのようにパージを実行します。見逃さず。

0

SSH秘密鍵を設定する必要があります。このページ、Macでの設定方法を確認できます。Linuxを使用している場合、ガイドはほとんど同じですが、WindowsではMSYSなどのツールが必要です。


0

少なくともWindowsでTortoiseGITを使用している場合、SSHキーを作成し、これらを単純にGITサーバーに転送することが可能であると思われます。

> ssh-keygen.exe
> ssh-copy-id [username]@[GIT_server]
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.