Gitプライベートリポジトリからダウンロードする自動構築サービスを利用しています。問題は、リポジトリを複製しようとするとき、パスワードが記憶されていないため、パスワードを提供する必要があることです。したがって、人間の操作がないため、パスワードを永久に待機します。 id_rsa.pubから強制的に記憶させるにはどうすればよいですか?
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できます。
この回答では、SSHキーパスフレーズではなく、GitHubのユーザー名とパスワードを永続的に保存する方法について説明します。
Windowsでは、単に実行する
$ git config --global credential.helper wincred
つまり、次回プッシュするときに、通常どおりユーザー名とパスワードを入力しますが、それらはWindows資格情報に保存されます。その後、再度入力する必要はありません。
新しい端末を開くときに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
質問を正しく理解している場合、ビルドサービスで既に承認済みのSSHキーを使用していますが、すべてのクローンにパスフレーズを入力する必要はありませんか?
これを行うには2つの方法が考えられます。
ビルドサービスをインタラクティブに開始する場合:ビルドサービスを開始する前に、ssh-agent
を十分に長いタイムアウト(-t
オプション)で開始します。次に、ssh-add
(msysGitに必要)を使用して、ビルドサービスを開始する前に必要なすべての秘密キーを追加します。すべてのパスフレーズを入力する必要がありますが、サービスの起動ごとに1回だけです。
パスフレーズをまったく入力しなくても済むようにするには、https://serverfault.com/questionsで説明されているように、SSHキーからパスフレーズをいつでも削除できます。/50775/how-do-i-change-my-private-key-passphrase、空の新しいパスフレーズを設定します。これにより、パスワードプロンプトは完全に不要になりますが、前のオプションよりも安全性は低くなります。
@starmonkeyが言ったこと。 〜/ .bashrcの内容について混乱している場合は、このSOの答えを確認してください。 Git for Windows:.bashrcまたはGit Bash Shellの同等の構成ファイル
コードをプッシュしようとすると、次のエラーが表示されました。
$ 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のユーザー名とパスワードを入力するプロンプトが表示されました。正しい資格情報を提供すると、コードをプッシュできます。
適切なソリューションは次のとおりです。
Windowsのデフォルトターミナル-cmdを実行し、マスタープロファイルのディレクトリを取得します
echo %USERPROFILE%
上記のディレクトリでGit Bashを実行し、コマンドで.bashrc
ファイルを作成します
echo "" > .bashrc
.bashrc
ファイルをお気に入りのテキストエディターで開き、 GitHubヘルプのコード をそのファイルに貼り付けます。
env=~/.ssh/agent.env
...
COPY WHOLE CODE FROM URL - I can't add it to Stack Overflow because it breaks layout... OMG!
Git Bashを再起動すると、パスワードの入力が求められ(初回のみ)、完了します。パスワードが再び煩わされることはありません。