126

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

4

7 に答える 7

258

Windows ユーザーの場合は、Git Bash 環境をセットアップして、起動時に1 回ログインするように設定していることに注意してください。ファイルを編集し~/.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 できるようになりました。

于 2012-01-25T22:12:00.790 に答える
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
于 2016-11-02T14:27:30.103 に答える
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、空の新しいパスフレーズを設定します。これにより、パスワード プロンプトが完全になくなりますが、前のオプションよりもさらに安全性が低くなります。

于 2011-05-15T12:34:31.277 に答える
-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ます。

于 2011-04-20T09:36:40.227 に答える