Windowsでgitがパスフレーズを思い出せない理由


144

私はgitを使い始めたばかりですが、パスフレーズを覚えられません。昇格したcmd.exeを使用しています。gitホストはgithubで、githubにそのガイドのようなsshキーを作成しています

しかし、私はまだ得る

*\subnus.mvc>git push origin master
Enter passphrase for key '/c/Users/Subnus/.ssh/id_rsa':

私自身はmsysgitを使用していませんが、ページェント認証エージェントが役立つ場合があります。
Cebjyre 2008

1
私はすべてを試みた後、私が見つかりました。これを働いています。
Blake Niemyjski、2012

1
Windows 10には、しばらくの間OpenSSHが同梱されています。ssh-agentサービスを有効にし、ssh-addを使用してキーをsshストアに追加GIT_SSHし、環境に設定し(必要な場合)、git / sshがssh-agentを介してパスフレーズを記憶します。詳細な手順については、以下の私の回答を参照してください。
d3r3kk

1
2019年、Windows 10にgitをインストールしたところ、gitはパスワードを1回要求し、それを記憶しています。
ジャン=フランソワ・ファーブル

@Jean-FrançoisFabreOpenSSLを使用していない可能性があります。
RoadRunner

回答:


206

この質問は2歳で出てくると思いますが、私は同じ問題を抱えていて、ここでいくつかの回答を出しても完全には答えられませんでした。msysgitに加えてTortoiseGitを使用するかどうかに応じて、2つの段階的なソリューションがあります。

最初のソリューション Windows、msysgit、およびPuTTYを想定しています。

  1. 指示に従ってmsysgitとPuTTYをインストールします。
  2. (オプション)PuTTYをパスに追加します。(これを行わない場合、以下のPuTTYコマンドへの参照には、適切な実行可能ファイルへの完全パスをプレフィックスとして付ける必要があります。)
  3. まだ行っていない場合は、GitHubの指示またはGitホストの指示に従って、キーハッシュを生成します。
  4. まだ行っていない場合は、再度、パテのpageant.exeを使用しての使用のためのあなたの鍵に変換puttygen.exeを。手順は、PuTTYのドキュメント、この役立つガイド、およびサイバースペースの他のいくつかの場所にあります。
  5. PuTTYのpageant.exeを実行し、.ppkファイル(「キーの追加」)を開いて、キーのパスフレーズを入力します。
  6. Windowsの環境変数ダイアログにアクセスします([コンピューター]を右クリックし、[プロパティ]をクリックします。[システムの詳細設定]または[詳細設定]タブをクリックし、[環境変数]をクリックします)。次の環境変数を追加します。

    GIT_SSH = C:\ full \ path \ to \ plink.exe

    「C:\ full \ path \ to」を、plink.exeがあるPuTTYへの完全なインストールパスに置き換えます。「ユーザー変数」セクションに追加することをお勧めします。また、plink.exeに使用するパスがPageant(pageant.exe)に使用するパスと一致していることを確認してください。場合によっては、PuTTYが他のアプリケーションと共にインストールされる可能性があるため、PuTTYが複数インストールされていることがあります。あるインストールのplink.exeと別のインストールのpageant.exeを使用すると、問題が発生する可能性があります。

  7. コマンドプロンプトを開きます。

  8. Github.comでホストされているgitリポジトリに接続しようとしている場合は、次のコマンドを実行します。

    plink.exe git@github.com

    接続しようとしているgitリポジトリが別の場所でホストされている場合は、git @ github.comを適切なユーザー名とURLに置き換えます。(Githubを想定)サーバーのホストキーがキャッシュされていないことを通知され、信頼できるかどうか尋ねられます。yと答えます。これにより、サーバーのホストキーがPuTTYの既知のホストのリストに追加されます。このステップがないと、gitコマンドは正しく機能しません。Enterキーを押すと、Githubはシェルアクセスを提供しないことを通知します。それで結構です...私たちはそれを必要としません。(他のホストに接続していて、シェルにアクセスできる場合は、他に何もせずにリンクを終了するのがおそらく最善です。)

  9. すべて完了!Gitコマンドはコマンドラインから動作するはずです。あなたはpageant.exeしたいことがあり、起動時に自動的にロードあなたの.ppkファイルをあなたがそれを必要とすることがありますどのくらいの頻度に応じて、。

2番目のソリューション Windows、msysgit、およびTortoiseGitを想定しています。

TortoiseGitには、PuTTY実行可能ファイルと特別に変更されたバージョンのplink(TortoisePlink.exeと呼ばれます)が付属しており、これにより作業が容易になります。

  1. 指示に従ってmsysgitとTortoiseGitをインストールします。
  2. まだ行っていない場合は、GitHubの指示またはGitホストの指示に従って、キーハッシュを生成します。
  3. まだ行っていない場合は、再度、TortoiseGitの使用TortoiseGitのpageant.exeで使用するためにあなたの鍵に変換puttygen.exeを。手順は、PuTTYのドキュメント、最初のソリューションにリンクされている役立つガイド、およびサイバースペースの他のいくつかの場所にあります。
  4. TortoiseGitのpageant.exeを実行し、.ppkファイル(「キーの追加」)を開いて、キーのパスフレーズを入力します。
  5. Windowsの環境変数ダイアログにアクセスします([コンピューター]を右クリックし、[プロパティ]をクリックします。[システムの詳細設定]または[詳細設定]タブをクリックし、[環境変数]をクリックします)。次の環境変数を追加します。

    GIT_SSH = C:\ full \ path \ to \ TortoisePlink.exe

    「C:\ full \ path \ to」をTortoisePit.exeがあるTortoiseGitへの完全なインストールパスに置き換えます。「ユーザー変数」セクションに追加することをお勧めします。また、TortoisePlink.exeに使用するパスがPageant(pageant.exe)に使用するパスと一致していることを確認してください。場合によっては、PuTTYが他のアプリケーションと共にインストールされる可能性があるため、PuTTYが複数インストールされていることがあります。TortoiseGitインストールのTortoisePlink.exeを使用し、別のアプリケーションの別のインストール(またはスタンドアロンのPuTTYインストール)からpageant.exeを使用すると、問題が発生する可能性があります。

  6. すべて完了!Gitコマンドはコマンドラインから動作するはずです。初めてgitリポジトリに接続しようとすると、おそらくサーバーのホストキーがキャッシュされていないことが通知され、サーバーを信頼するかどうかを尋ねられます。「はい」をクリックします。(これは動作中のTortoisePlink.exeです。)

    あなたはpageant.exeしたいことがあり、起動時に自動的にロードあなたの.ppkファイルをあなたがそれを必要とすることがありますどのくらいの頻度に応じて、。

3番目のソリューションウィンドウ、msysgit、およびネイティブコマンドプロンプトを想定しています。

  1. msysgitをインストールする
  2. MS-DOSコマンドプロンプトでgitを使用できるようにしてください
  3. 走る start-ssh-agent
  4. SSHパスフレーズを入力してください
  5. すべて完了!Gitコマンドがネイティブコマンドプロンプトで機能するようになりました。

3
GitExtensionsとTortoiseGitの両方があり、それぞれに独自のバージョンのパテがある場合は、GIT_SSH環境変数を、実際に使用しているページェントのplinkのパスに設定してください
shovavnik

15
他の誰かがこの愚かなエラーに遭遇した場合に備えて:HTTPS URLではなくSSHリモートURL形式(git @ host:accountname / reponame.git)を使用していることを確認してください。
1

plink.exe git@github.comを実行すると、「致命的なエラー:サーバーがネットワーク接続を予期せず閉じました」
Brett

4
注:メソッド3はmsysgitにアップストリームされているためstart-ssh-agent、コマンドラインで入力するだけでSSHパスフレーズを保存できます。
Matt Clarkson、

6
3番目のソリューションは、コマンドプロンプトが閉じられるまで、そのコマンドプロンプトに対してのみ機能します。他のすべてのCMDは引き続きパスフレーズを要求します。また、他のすべてのクライアント(VS、VSコード)はリモートgitとの通信に失敗します。
Dima

21

新しいデスクトップをセットアップするたびに、これらの指示を忘れてしまうので、同じように頻繁に偶然見つけたので、ここに別の答えを追加します。


私のようなせっかちなユーザーのための簡単な手順

  1. OpenSSH Authentication Agentサービスを有効にして、自動的に開始させます。
  2. ssh-addコマンドラインでSSHキーをエージェントに追加します。
  3. git統合をテストします。それでもパスフレーズが必要な場合は、続行します。
  4. 環境変数$ENV:GIT_SSH=C:\Windows\System32\OpenSSH\ssh.exeをセッションに追加するか、永続的にユーザー環境に追加します。

詳細な手順:概要

Windowsは、しばらくの間、OpenSSHとともに出荷されています。sshがGitと連携して動作するために必要なすべてのビットが含まれていますが、100%シームレスに動作する前にTLCが必要なようです。これは、Windowsバージョン10.0.18362.449の時点で私が成功している手順です(cmd.exeシェルを開いてと入力すると、Windows 10のバージョンを確認できますver)。

ここでは、SSHキーがすでにセットアップされていると想定しています。 ~/.ssh/id_rsa

Windows 10ボックスでssh-agentサービスを有効にします。

  1. スタート->「サービス」と入力し、表示されるサービスアプリをクリックします。
  2. OpenSSH Authentication Agentリストからサービスを見つけます。
  3. OpenSSH Authentication Agentサービスを右クリックし、「プロパティ」を選択します。
  4. をに変更Startup type:Automaticます。
  5. Startボタンをクリックして、サービスのステータスをに変更しますRunning
  6. をクリックしてダイアログOKを閉じ、サービスアプリを閉じます。

にキーを追加します ssh-agent

  1. 好みのシェルを開きます(この例ではWindows Powershellを使用しますが、Powershell Coreにも適用されます)
  2. SSHキーをssh-agent:に追加しますssh-add (デフォルトと異なる場合は、最初の引数としてキーへのパスを追加できます)
  3. パスフレーズを入力する場合は、入力を求められたら入力します。

Git + SSHを試す

  1. シェルを開き(ここでも、Powershellを使用しています)、リポジトリを複製します。git clone git@github.com:octocat/Spoon-Knife
  2. このプロンプトが表示された場合は、次のセクションに進んでください。
Enter passphrase for key '/c/Users/your_user_name/.ssh/id_rsa':

GIT_SSH環境変数を設定する

どのセッションでも、この環境変数を設定するだけで、パスフレーズのプロンプトが表示されなくなり、sshがssh-agent代わりにを使用します。または、パスフレーズをユーザーの環境に永続的に設定することもできます。

GIT_SSH現在のシェルでのみ設定するには:

  1. 好みのシェルを開きます。(Powershell for me)
  2. 環境変数GIT_SSHを適切に設定しますssh.exe$Env:GIT_SSH=$((Get-Command -Name ssh).Source)
  3. 上記の「Git + SSH試す」の手順を再試行します。

GIT_SSH永久に設定するには

  1. エクスプローラーを開きます。スタート->「ファイルエクスプローラー」と入力し、リストでクリックします。
  2. 「このPC」を右クリックし、「プロパティ」をクリックします。
  3. 「システムの詳細設定」をクリックします。
  4. 「環境変数...」ボタンをクリックします。
  5. 「your_user_nameのユーザー変数」で「新規」をクリックします。
  6. Variable name:フィールドをGIT_SSHに設定します
  7. 設定するVariable value:パスツーこれは、ssh.exe(一般的にフィールドをC:\Windows\System32\OpenSSH\ssh.exe)。
  8. [OK]をクリックして、[新しいユーザー変数]ダイアログを閉じます。
  9. [OK]をクリックして、[環境変数]ダイアログを閉じます。
  10. 上記の「Git + SSH試す」の手順を再試行します。

これは、Windows 10が進むにつれて、そして私がさらに学ぶにつれて、新しいステップや手順によって変わる可能性があることに注意してください。私はこれを更新し続けるつもりです、コメントでフィードバックを楽しみにしています。


3
これは、少なくともWindowsでは、2020年1月31日の時点で最も完全な回答です。PUTTYなどをインストールする必要はありません。
ジェイク

同意した。組み込みのサポートがついに登場したようです。
エロンロイド

伝説!これは私の問題を解決しました。しばらくの間、解決策を探していましたが、さまざまなことを試しました。これは、この問題に対する最も完全なオーナである
Collin

いい答えと、おそらく数時間のいじりを節約してくれた答えに感謝します。+1
怒り84

20

より詳細な手順が必要な場合は、このページを参照してください:http : //help.github.com/working-with-key-passphrases/


まさにmsysgitシェルを使用するために必要なもの。
arthurakay 2016

1
Git Bashデスクトップアプリを使用するときに私のために働いた。私notepad ~/.profileはそのリンクからコンテンツを使用してコピー貼り付けし、Git Bashを再起動し、パスワードを入力し、利益を得ました...
Daryn

「Git for Windowsでssh-agentを自動起動する」セクション(Win 10でgit 2.xを使用)を実行しましたが、それでも常にパスワードを要求されました。受け入れられた答えからの最初の解決策(パテ)の後、私のためにこれを修正しました。
jakub.g 2018

20

使用している場合にはGitのはbashを下にWindowsの次の操作を実行できます。

eval `ssh-agent -s`
ssh-add ~/.ssh/*_rsa

2番目のコマンドでパスフレーズを要求し、それだけです。実行する必要がある追加のアクションごとに(これはパスフレーズが必要でした)、パスフレーズを要求しません(下のスクリーンショットの例を参照)。

WindowsのGit bashにパスフレーズを追加する


2
これはWindows 10のUbuntuサブシステムでも機能します
。– meetar

1
キーペアが別の場所にある場合は、〜/ .ssh / * _ rsaを* .pemファイルのパスに置き換えることができます
alex_danielssen

13

質問が投稿されてから5年、8か月、6日後に1つの追加のソリューションを用意することは悪い考えではないので、ここで説明します。

注: Windowsコンピューターを使用していることを前提としています。

  1. git-credential-winstoreをダウンロードする
  2. それを実行します!PATH環境変数にGITが含まれている場合、それは機能するはずです。そうでない場合は、を実行しgit-credential-winstore -i C:\Path\To\Git.exeます。

次にリポジトリにコミットしようとすると、資格情報を入力するように求められます。それはそれであるはずです。パスワードを変更するまで、資格情報の入力を求められることはありません。


ご参考までに...資格情報はWindows資格情報ストアに保存されます

私の資格情報はどこに保存していますか?

このアプリは、既存のWindows資格情報ストアを使用して資格情報を保持します。保存されている資格情報は、[コントロールパネル]> [ユーザーアカウント]> [資格情報マネージャー]に移動し、[Windows資格情報]を選択すると表示できます。「git:」で始まるエントリは、git-credential-winstoreからのものです。


8
このソリューションは、SSHリポジトリでは機能せず、HTTPSでのみ機能するようです。/ angryface
JasonCoder 2015

8

鍵ファイルにパスワードを設定した場合、接続時に常にそのパスワードを入力する必要があります。パスワードなしのキーを作成した場合は、毎回入力する必要はありませんが、キーファイルにアクセスできる人なら誰でもgithubアカウントに接続できます。

ssh-agentも機能する場合があります。これを実行して、パスフレーズが記憶されるかどうかを確認してください。


実行ssh-keygen -pすると、OPはパスフレーズを設定できなくなります
luchosrock 2014

パスワードの入力を求めています。
versedi

7

[編集-質問を誤解してください、これは関連する問題への回答です。後世のために言い換えたバージョンを残す]

私の場合は、私たちのサーバーの1つでホストされているレポにプッシュしようとしていました。プッシュしようとすると、gitは私のパスワード(nb-パスワード、秘密鍵のパスフレーズではない)を尋ねてきます。

サーバー上の承認済みキーに公開キーを追加することで、そのサーバーへのパスワードなしのプッシュを取得できました。そして、パスフレーズがなかったので秘密鍵に(これは悪い習慣です!)、何も入力する必要がありませんでした。

公開鍵をサーバーに追加するコマンドは次のとおりです。ユーザーgitがサーバー上のユーザーであると想定しています。

cat .ssh/id_rsa.pub | ssh git@GIT_MASTER_IP 'cat >> .ssh/authorized_keys'

サーバーにログオンし、公開鍵を次の場所にあるファイルに手動で追加することで、同じことを実現できます。 ~/.ssh/authorized_keys


これを、シェルにアクセスできない人が使用できる説明に変換できますか?たとえば、メモ帳などを使用してauthorized_keysに何を入れればよいですか?
John Little

4

これは数年遅れていることに気づきましたが、私はこの問題に出会い、解決策を見つけようとしましたが、あらゆるレベルの専門知識に適したものを見つけたので、共有したいと思いました。

GitHubは非常に便利なインストーラーを提供しており、すべてが簡単で便利です。https//help.github.com/articles/caching-your-github-password-in-git/


これはGitHub パスワードをキャッシュしていることに注意してください GPGキーのパスフレーズではなく、。
2020

4

純粋なGit Bashを使用したいとしますTortoiseGitやPuTTYを使用せずにのみのソリューション。また、パスフレーズなしでSSH鍵を生成した場合とほとんど同じであるため、パスフレーズを永続的に保存する必要はありません。しかし、それでも、いくつかのキャッシングを使用する必要があります。

キャッシュの目的ssh-agentで、Git Bashディストリビューションに含まれているプロセスが使用されます。このプロセスはデフォルトでは開始されないため、最初に起動する必要があります。SSHキーをキャッシュするには、これらのキーをこのプロセスに追加する必要がありますssh-addは、キーのパスフレーズの入力を求めてメモリに保存するコマンドを使用ます。

他のソリューションの欠点:

  • GitHubの記事のssh-agentように自動起動すると、このセッションでSSHキーを使用する必要があるかどうかに関係なく、Git Bashを起動すると、最初からパスフレーズが要求されます。今日ローカルリポジトリで作業している場合は、本当に必要な場合(たとえば、リモートリポジトリと対話する場合)にのみパスフレーズを提供することをお勧めします。
  • GitLabの記事で「いいね!」を起動するssh-agentと、おそらく毎回それを入力するのにうんざりします。おそらく、最終的には、これらの2行をeval $(ssh-agent -s).bashrcして自動起動する可能性があります。欠点は上記と同じですが、追加の1つがあります。新しいGit Bashターミナルを起動するたびに、追加のssh-agentプロセスが取得されます(GitHubのbashスクリプトは、そのプロセスがすでに開始されているかどうかをチェックします)。
  • 上記の2つと同様ですが、特に、GitHub用とGitLab用の別のホストに個別のSSHキーがある場合は、一度にすべてを提供するのは面倒で不便です。

したがって、このソリューションは、Git BashがWindowsセッションごとに1回だけ、本当に必要なときにだけパスフレーズを要求するようにする方法を知りたい人のためのものです。GnuPGコミットによるパスフレーズ管理の動作に似ていますを使用して自動署名default-cache-ttl

必要に応じてGit Bashのみを使用して、パスフレーズを1回要求するようにSSHを構成する

  1. まず、ssh-agentGit Bashシェルを起動するときにを自動起動します。そのために、変更されたGitHubのスクリプトを使用します。これは、プロセスがすでに開始されているかどうかをチェックするためですが、ssh-addすぐにキーを押したくありません。このスクリプトは、~/.bashrcorまたは~/.profileorに移動します~/.bash_profile~ユーザーのホームディレクトリのようにC:\Users\Username–実行cd ~してからpwd、Git Bashで出力します)。

    ### Start ssh-agent
    
    env=~/.ssh/agent.env
    
    agent_load_env () { test -f "$env" && . "$env" >| /dev/null ; }
    
    agent_start () {
        (umask 077; ssh-agent >| "$env")  # use -t here for timeout
        . "$env" >| /dev/null ; }
    
    agent_load_env
    
    # agent_run_state: 0=agent running w/ key; 1=agent w/o key; 2= agent not running
    agent_run_state=$(ssh-add -l >| /dev/null 2>&1; echo $?)
    
    if [ ! "$SSH_AUTH_SOCK" ] || [ $agent_run_state = 2 ]; then
        agent_start
    fi
    
    unset env
  2. 次に、~/.ssh/configファイルを編集または作成し、AddKeysToAgentキャッシュをオンにするホストスタンザごとにオプションを追加します(すべてのホスト宣言の前にファイルの先頭にディレクティブを配置して、グローバルにオンにすることもできます)。

    # GitHub.com
    Host github.com
      Preferredauthentications publickey
      IdentityFile ~/.ssh/id_ed25519_github
      AddKeysToAgent yes
    
    # GitLab.com
    Host gitlab.com
      Preferredauthentications publickey
      IdentityFile ~/.ssh/id_ed25519_gitlab
      AddKeysToAgent yes

    ssh config man ページからこのオプションがyesに設定されていて、キーがファイルから読み込まれる場合、ssh-add(1)の場合と同様に、キーとそのパスフレーズがデフォルトのライフタイムでエージェントに追加されます。

デフォルトの最大存続期間は、永久に、またはssh-agentプロセスが強制終了されるまでです(タスクマネージャーから手動で、またはPCがシャットダウンされたとき)。有限のタイムアウトを使用したい場合は、ssh-agentの-tパラメーターで設定できます。上記の最初のステップからbashスクリプトの行を変更します。たとえば、キーキャッシュの有効期間を30分間にします。

(umask 077; ssh-agent -t 30m >| "$env")

その他の時刻形式修飾子については、こちらをご覧ください。


3

.bashrcようC:/Users/youruserにユーザーのホームディレクトリにファイルを作成し、そこに置くことができます。

env=~/.ssh/agent.env

agent_load_env () { test -f "$env" && . "$env" >| /dev/null ; }

agent_start () {
    (umask 077; ssh-agent >| "$env")
    . "$env" >| /dev/null ; }

agent_load_env

# agent_run_state: 0=agent running w/ key; 1=agent w/o key; 2= agent not running
agent_run_state=$(ssh-add -l >| /dev/null 2>&1; echo $?)

if [ ! "$SSH_AUTH_SOCK" ] || [ $agent_run_state = 2 ]; then
    agent_start
    ssh-add
elif [ "$SSH_AUTH_SOCK" ] && [ $agent_run_state = 1 ]; then
    ssh-add
fi

unset env

このスクリプトは、bashの実行後に毎回実行されます。そのため、git-bash起動時にパスワードを入力する必要があるのは1回だけです。

bashの一部のバージョンでは、.bash_profile代わり.bashrcにファイルが必要になるため、念のためクローンを作成し.bashrcます。

copy .bashrc .bash_profile

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