git プライベート リポジトリからダウンロードする自動ビルド サービスがあります。問題は、リポジトリのクローンを作成しようとするときに、パスワードが記憶されていないため、パスワードを提供する必要があることです。人間の介入がないため、パスワードを永遠に待ちます。id_rsa.pub から強制的に記憶させるにはどうすればよいですか?
7 に答える
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 できるようになりました。
新しい端末を開くときに 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/50775/how-do-i-change-my-で説明されているように、いつでも SSH キーからパスフレーズを削除できます。 private-key-passphrase、空の新しいパスフレーズを設定します。これにより、パスワード プロンプトが完全になくなりますが、前のオプションよりもさらに安全性が低くなります。
リポジトリ サーバーに接続するユーザーauthorized_keys
のフォルダーの下にファイルを作成する必要があります。.ssh
たとえば、ユーザー名を使用すると仮定すると、次buildservice
をrepo.server
実行できます。
cd ~buidservice
mkdir ./ssh
cat id_rsa.pub >> .ssh/authorized_keys
次に、次のことを確認する必要があります。
対応する
id_rsa
秘密鍵を に示しbuilservice@build.server:~/.shh/id_rsa
ます。repo.server のフィンガープリントは
buildservice@build.server:~/.ssh/known_hosts
ファイルに保存されます。ssh
通常、これはへの最初の接続試行後に行われrepo.server
ます。