web-dev-qa-db-ja.com

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

Gitプライベートリポジトリからダウンロードする自動構築サービスを利用しています。問題は、リポジトリを複製しようとするとき、パスワードが記憶されていないため、パスワードを提供する必要があることです。したがって、人間の操作がないため、パスワードを永久に待機します。 id_rsa.pubから強制的に記憶させるにはどうすればよいですか?

123
D.Giunchi

Windowsユーザーの場合は、これが、Git Bash環境をセットアップして、起動時にonceでログインすることに注意してください。 ~/.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できます。

251
starmonkey

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

Windowsでは、単に実行する

$ git config --global credential.helper wincred

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

たとえば、ユーザー名とパスワードを毎回入力せずにGitHubにプッシュ(WindowsのGit Bash)

61

新しい端末を開くときに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
6
Conan

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

これを行うには2つの方法が考えられます。

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

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

4
millimoose

@starmonkeyが言ったこと。 〜/ .bashrcの内容について混乱している場合は、このSOの答えを確認してください。 Git for Windows:.bashrcまたはGit Bash Shellの同等の構成ファイル

1
narak

コードをプッシュしようとすると、次のエラーが表示されました。

$ git Push Origin dev

remote: Too many invalid password attempts. Try logging in through the website with your password.
fatal: unable to access 'https://[email protected]/xxxx/xxxx-api.git/': The requested URL returned error: 403

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

$ git config --global credential.helper cache

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

1
Naushad Qamar

適切なソリューションは次のとおりです。

  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を再起動すると、パスワードの入力が求められ(初回のみ)、完了します。パスワードが再び煩わされることはありません。

0