WindowsでGit Bashを使用するときに、秘密鍵を復号化するためのパスワードを毎回入力する必要があることを防ぐ方法は?


125

私はgitプライベートリポジトリからダウンロードする自動ビルドサービスを持っています。問題は、リポジトリのクローンを作成するときに、パスワードが記憶されていないため、パスワードを提供する必要があることです。そのため、人間の操作がないため、パスワードを永久に待機します。id_rsa.pubから覚えさせるにはどうすればよいですか?

回答:


255

Windowsユーザーの場合、これが起動時に一度ログインするようにGit Bash環境を設定する方法であることに注意してください。~/.bashrcファイルを編集します。

eval `ssh-agent`
ssh-add

したがって、Git Bashを起動すると、次のようになります。

Welcome to Git (version 1.7.8-preview20111206)
(etc)
Agent pid 3376
Enter passphrase for /c/Users/starmonkey/.ssh/id_dsa:
Identity added: /c/Users/starmonkey/.ssh/id_dsa (/c/Users/starmonkey/.ssh/id_dsa)

これで、毎回ログインしなくても他のサーバーにSSHで接続できるようになりました。


9
〜/ .bashrcファイルがない場合は、新しいテキストファイル(メモ帳またはその他のエディター)を作成し、上記のstarmonkeyの2行を追加します。
pbz 2012

7
「〜」は「ホームディレクトリ」を指します。Windowsでは、コマンドシェル(cmd)を開いて「echo%USERPROFILE%」と入力すると、これを見つけることができます。
Hawkeye Parker

14
私にとって、この構文は機能しません。eval $(ssh-agent)代わりに書く必要がありました。
衝突

1
私の問題は、ssh-addが使用するファイルを指定する必要があることでした。おそらく、私には複数あり、デフォルト名を使用していなかったためです。例ssh-add ~/.ssh/myfile_rsa
構文エラー

1
copy > ~/.bashrcgit bashでWindowsにbashrcファイルを作成するには、エラーを無視してください
Ruben

61

この回答では、SSHキーのパスフレーズではなく、GitHubのユーザー名とパスワードを永続的に保存する方法について説明します。

Windowsでは、実行するだけです

$ git config --global credential.helper wincred

つまり、次にプッシュするときは、通常どおりユーザー名とパスワードを入力しますが、それらはWindows資格情報に保存されます。その後、再度入力する必要はありません。

同様に、毎回ユーザー名とパスワードを入力せずにGitHubプッシュします(WindowsのGit Bash)


2
このコマンドの後に、ユーザー名とパスワードを入力する必要があります。
Stephen Tun Aung

5
これはSSHキーに関係しますか、それともHTTPS(ユーザー名とパスワード)認証のみに関係しますか?問題は、SSHキーの使用についてのようです。
Sean

私は完全に機能しましたが、私はHTTPS(ユーザー名とパスワード)認証を使用していると思います。
ジョナタン

これを実行しても、出力はまったく生成されませんでした。
user9993

@ user9993ありません。これは設定変更であるため、出力は行われませんgitが、設定ディレクティブセットに従って動作が変更されます。
starbeamrainbowlabs 2017

9

新しい端末を開くときに、SSHパスフレーズを入力する必要がないようにしています。残念ながらstarmonkeyのソリューションでは、すべてのセッションでパスワードを入力する必要があります。代わりに、これを自分の.bash_profileファイルに入れます:

# Note: ~/.ssh/environment should not be used, as it
#       already has a different purpose in SSH.

env=~/.ssh/agent.env

# Note: Don't bother checking SSH_AGENT_PID. It's not used
#       by SSH itself, and it might even be incorrect
#       (for example, when using agent-forwarding over SSH).

agent_is_running() {
    if [ "$SSH_AUTH_SOCK" ]; then
        # ssh-add returns:
        #   0 = agent running, has keys
        #   1 = agent running, no keys
        #   2 = agent not running
        ssh-add -l >/dev/null 2>&1 || [ $? -eq 1 ]
    else
        false
    fi
}

agent_has_keys() {
    ssh-add -l >/dev/null 2>&1
}

agent_load_env() {
    . "$env" >/dev/null
}

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

if ! agent_is_running; then
    agent_load_env
fi

# If your keys are not stored in ~/.ssh/id_rsa or ~/.ssh/id_dsa, you'll need
# to paste the proper path after ssh-add
if ! agent_is_running; then
    agent_start
    ssh-add
elif ! agent_has_keys; then
    ssh-add
fi

unset env

これにより、新しいターミナルセッションのパスフレーズも記憶されます。ブート後に最初のターミナルを開いたときに一度だけ入力する必要があります。

私がこれを手に入れた場所を信用したいと思います。他人の作品を改変したものですが、どこから来たのか思い出せません。匿名の作者に感謝します!

アップデート2019-07-01:これはすべて必要だとは思いません。私の.bash_profileファイルが確実にssh-agentを実行するようにすることで、これが一貫して機能しています。

eval $(ssh-agent)

次に、次のsshような構成ファイルを設定します。

touch ~/.ssh/config
chmod 600 ~/.ssh/config
echo 'AddKeysToAgent yes' >> ~/.ssh/config

それでも毎回パスフレーズを求められます。
Ryan

1
@ライアンは、私が追加したばかりのアップデートが問題に対処することを願っています。私は、ブログの記事でこれまでに情報を維持conan.is/blogging/clojure-on-windows.htmlで自分自身を、と私は同じ質問をしstackoverflow.com/questions/52423626/...
コナン

よろしくお願いします。
Ryan

@Conan更新されたソリューションは、bashセッションごとに機能します。実行中のbashセッションを閉じて新しいセッションを開いた後、もう一度パスワードの入力を求められました。
Tushar Raj

5

質問を正しく理解した場合、ビルドサービスで承認済みのSSHキーをすでに使用していますが、すべてのクローンのパスフレーズを入力する必要を避けたいですか?

これを行うには2つの方法を考えることができます。

  1. ビルドサービスがインタラクティブに開始されている場合:ビルドサービスを開始する前にssh-agent、十分に長いタイムアウト(-tオプション)で開始します。次に、ssh-add(msysGitにそれらが必要です)を使用して、ビルドサービスを開始する前に必要なすべての秘密鍵を追加します。すべてのパスフレーズを入力する必要がありますが、サービスの起動ごとに1回だけです。

  2. パスフレーズを入力する必要をまったく避けたい場合は、https://serverfault.com/questions/50775/how-do-i-change-my-で説明されているように、SSHキーからパスフレーズをいつでも削除できます。 private-key-passphrase、空の新しいパスフレーズを設定する。これにより、パスワードプロンプトは完全になくなりますが、以前のオプションよりも安全性が低くなります。


2番目のオプションをありがとう、私はそれが必要でした。
Stanislav Verjikovskiy 2014

1

コードをプッシュしようとすると、次のエラーが発生しました。

$ git push origin dev

remote: Too many invalid password attempts. Try logging in through the website with your password.
fatal: unable to access 'https://naushadqamar-1@bitbucket.org/xxxx/xxxx-api.git/': The requested URL returned error: 403

数時間の調査の結果、以下のコマンドを使用する必要があることがわかりました。

$ git config --global credential.helper cache

上記のコマンドを実行した後、GitHubのユーザー名とパスワードを入力するプロンプトが表示されました。正しい資格情報を提供した後、コードをプッシュすることができます。


これは、「git: 'credential-cache'はgitコマンドではありません」を生成しました。しかし、「git config --global credential.helper store」は機能しました-これは最善ではないかもしれませんが、私は自分の優先SSHではなくHTTPSを使用せざるを得ず、それを機能させたいだけです。
Terry Brown

0

正しい解決策は次のとおりです。

  1. Windowsのデフォルトターミナル-cmdを実行し、マスタープロファイルのディレクトリを取得します。

    echo %USERPROFILE%
    
  2. 上記のディレクトリでGit Bashを実行.bashrcし、次のコマンドでファイルを作成します

    echo "" > .bashrc
    
  3. .bashrcお好みのテキストエディターでファイルを開き、GitHubヘルプのコードをそのファイルに貼り付けます。

    env=~/.ssh/agent.env
    ...
    COPY WHOLE CODE FROM URL - I can't add it to Stack Overflow because it breaks layout... OMG!
    
  4. Git Bashを再起動すると、パスワードが要求され(初回のみ)、完了します。再び煩わしいパスワードはありません。


-1

リポジトリサーバーに接続するユーザーauthorized_keys.sshフォルダーの下にファイルを作成する必要があります。たとえば、ユーザー名を使用しているとすると、次のコマンドbuildservicerepo.server実行できます。

cd ~buidservice
mkdir ./ssh
cat id_rsa.pub >> .ssh/authorized_keys

次に、次のことを確認する必要があります。

  1. 対応するid_rsa秘密鍵はに示されていbuilservice@build.server:~/.shh/id_rsaます。

  2. repo.serverのフィンガープリントはbuildservice@build.server:~/.ssh/known_hostsファイルに保存されます。通常、への最初のssh接続試行後に行われrepo.serverます。


私は言うことを忘れています。Windowsでは、ホームディレクトリはおそらくC:\ Users \ Usernameです
beduin

5
うーん.. Git bashはそれをすべて持っています、質問のタイトルをもっと注意深く読んでください。また、質問から、私はキーペアがすでに生成されていると仮定しました(リポジトリサーバーにid_rsa.pubを記憶させる方法を尋ねられたためです)。
ベドゥイン2011

1
さて、これまで「git bash」について聞いたことがない。「申し訳ありませんが、その試合
sehe

これはmsysgitを使用していると思います。タグを追加します。
アダムDymitruk

3
警告!を使用cat id_rsa.pub > .ssh/authorized_keysすると、既存の承認済みキーが上書きされます。>>上書きではなく追加に使用します。
DavidPärsson2016年
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.