githubチュートリアルの指示に従ってキーを作成し、それらをgithubに登録して、ssh-agentを明示的に使用してみましたが、プルまたはプッシュを実行しようとするたびに、gitはパスフレーズを要求し続けます。
原因は何でしょうか?
SSHエージェントを開始したら:
eval $(ssh-agent)
次のいずれかを実行します。
秘密鍵を追加するには:
ssh-add
これにより、パスフレーズが1回だけ要求されます。その後、公開鍵をGithubにアップロードした場合は、プッシュが許可されます。
キーをmacOSに永続的に追加して保存するには:
ssh-add -K
これにより、ユーザーのキーチェーンに保存して閉じてから再度開いた後も保持されます。
Ubuntu(または同等のもの)にキーを永続的に追加して保存するには:
ssh-add ~/.ssh/id_rsa
これは、OS X El Capitan(10.11)からmacOS Sierra(10.12)にアップグレードしてから、再起動後に発生しています。ソリューションは一時的に機能しましたが、ssh-add
別の再起動後も持続しませんでした。
永続的な解決策は、オプションを編集(または作成)~/.ssh/config
して有効にすることでした。UseKeychain
Host *
UseKeychain yes
試しssh-add
てもパスフレーズの入力を求められる場合は、を使用してみてくださいssh-add -K
。これにより、パスフレーズがキーチェーンに追加されます。
更新:macOS Sierraを使用している場合は、上記が機能しなくなる可能性があるため、別の手順を実行する必要があります。以下をあなたのに追加してください~/.ssh/config
:
Host *
UseKeychain yes
私は次のことを試みます:
~/.bashrc
ファイルを編集する
SSH_ENV=$HOME/.ssh/environment
# start the ssh-agent
function start_agent {
echo "Initializing new SSH agent..."
# spawn ssh-agent
/usr/bin/ssh-agent | sed 's/^echo/#echo/' > ${SSH_ENV}
echo succeeded
chmod 600 ${SSH_ENV}
. ${SSH_ENV} > /dev/null
/usr/bin/ssh-add
}
if [ -f "${SSH_ENV}" ]; then
. ${SSH_ENV} > /dev/null
ps -ef | grep ${SSH_AGENT_PID} | grep ssh-agent$ > /dev/null || {
start_agent;
}
else
start_agent;
fi
Windowsで私のために働いたのは(私はレポ1からコードのクローンを作成しました):
eval $(ssh-agent)
ssh-add
git pull
その時、最後にもう一度パスフレーズを尋ねられました
クレジット:ソリューションは https://unix.stackexchange.com/questions/12195/how-to-avoid-being-asked-passphrase-each-time-i-push-to-bitbucketから取得されました
これを〜/ .ssh /configに追加してみてください:
Host *
AddKeysToAgent yes
UseKeychain yes
IdentityFile ~/.ssh/id_rsa
...秘密鍵の名前がid_rsaであると仮定します
上記の解決策がうまくいかない場合は、実際に公開鍵も持っていることを確認してください(通常はid_rsa.pub
)。そうしないのは珍しいことですが、それが私の原因でした。
秘密鍵から公開鍵を作成するには:
ssh-keygen -y -f ~/.ssh/id_rsa > ~/.ssh/id_rsa.pub
次を実行します。
eval $(ssh-agent) && ssh-add ~/.ssh/id_rsa &>/dev/null
パスフレーズを入力し、gitを確認します。Gitは、このコマンドの後にパスフレーズを要求するべきではありません。
元のソース:https ://gist.github.com/egoens/c3aa494fc246bb4828e517407d56718d
同様の問題がありましたが、他の回答では問題は解決しませんでした。他の誰かが私のような厄介な設定をしている場合に備えて、先に進んでこれを投稿すると思いました。
私は複数のキーを持っていて、Gitは最初に間違ったキーを使用していたことがわかりました。パスフレーズの入力を求められ、それを入力すると、Gitは機能する別のキーを使用します(パスフレーズを入力する必要はありませんでした)。
パスフレーズの入力を求めるために使用していたキーを削除したところ、機能するようになりました。
GitBashを使用しておらず、Windowsを使用している場合は、このコマンドを使用してssh-agentを起動する必要があります
start-ssh-agent.cmd
sshエージェントが設定されていない場合は、PowerShellを管理者として開き、手動モードに設定できます
Get-Service -Name ssh-agent | Set-Service -StartupType Manual
SSH-Agent自体に問題があるようです。トラブルシューティングを試みます。
1)SSHにキーを追加するためにssh-addを実行しましたか?
2)使用の合間にターミナルウィンドウを閉じていますか?ウィンドウを閉じた場合、再度開いたときにパスワードを再入力する必要があるためです。
WindowsまたはLinuxユーザーの場合、考えられる解決策はGitHub Docsに記載されています。これは、便宜上、以下に報告します。
ssh-agent
bashまたはGitシェルを開くと自動的に実行できます。次の行をコピーして、~/.profile
または~/.bashrc
ファイルに貼り付けます。
env=~/.ssh/agent.env
agent_load_env () { test -f "$env" && . "$env" >| /dev/null ; }
agent_start () {
(umask 077; ssh-agent >| "$env")
. "$env" >| /dev/null ; }
agent_load_env
# agent_run_state: 0=agent running w/ key; 1=agent w/o key; 2= agent not running
agent_run_state=$(ssh-add -l >| /dev/null 2>&1; echo $?)
if [ ! "$SSH_AUTH_SOCK" ] || [ $agent_run_state = 2 ]; then
agent_start
ssh-add
elif [ "$SSH_AUTH_SOCK" ] && [ $agent_run_state = 1 ]; then
ssh-add
fi
unset env
秘密鍵がデフォルトの場所の1つ(など~/.ssh/id_rsa
)に保存されていない場合は、SSH認証エージェントに秘密鍵の場所を指示する必要があります。キーをssh-agentに追加するには、と入力しssh-add ~/path/to/my_key
ます。
これで、 Git Bashを最初に実行すると、パスフレーズの入力を求められます。プロセスは、ssh-agent
ログアウトするか、コンピューターをシャットダウンするか、プロセスを強制終了するまで実行され続けます。
私はさまざまな解決策を試しましたが、何も役に立ちません。しかし、Bitbucket.comの継ぎ目からのこの手順(私のGitBash SSH環境は常に私のパスフレーズを要求します。何ができますか?)はうまく機能します:
アイデアは次のとおりです。
~/.bashrc
ファイルを作成します
フォロースクリプトを追加します。
SSH_ENV=$HOME/.ssh/environment
# start the ssh-agent
function start_agent {
echo "Initializing new SSH agent..."
# spawn ssh-agent
/usr/bin/ssh-agent | sed 's/^echo/#echo/' > "${SSH_ENV}"
echo succeeded
chmod 600 "${SSH_ENV}"
. "${SSH_ENV}" > /dev/null
/usr/bin/ssh-add
}
if [ -f "${SSH_ENV}" ]; then
. "${SSH_ENV}" > /dev/null
ps -ef | grep ${SSH_AGENT_PID} | grep ssh-agent$ > /dev/null || {
start_agent;
}
else
start_agent;
fi
Bashを再実行します
上記に記載されていない別の可能な解決策は、次のコマンドでリモコンを確認することです。
git remote -v
リモートがgitで開始せず、httpsで開始する場合は、以下の例に従ってgitに変更することをお勧めします。
git remote -v // origin is https://github.com/user/myrepo.git
git remote set-url origin git@github.com:user/myrepo.git
git remote -v // check if remote is changed
Win10を使用している場合:
私も同じ問題を抱えていました。(以前は、別の問題のため、ここからスクリプトを使用してssh-agentを個別に更新する必要がありました)
Gitは私のssh構成にアクセスしましたが(ssh構成に意味のない行がある場合、git pullは例外をスローしました)、ssh-agentを介して追加し、構成で参照した秘密鍵を気にしないようでした。
問題を修正したのは、PowerShellで次のコマンドを実行することでした。
git config core.sshCommand (get-command ssh).Source.Replace('\','/')
(詳細はこのリンクにあります)
Macでは、sshキーに毎回パスフレーズが必要で、それをスキップしたい場合は、以下を試してみてください。私にとっては問題なく動作します。
ホスト*
AddKeysToAgentはい
UseKeychainはい
IdentityFile〜/ .ssh / id_rsa
HTTPSの代わりにSSHを使用してオリジンリモートのURLを更新します。
git remote set-url origin "SSH URL COPIED FROM GIT REPO."
これは私と一緒に働くものです。
あなたがたまたま魚を使っているのなら、その要点があります:
# config.fish
if not pgrep -f ssh-agent > /dev/null
eval (ssh-agent -c)
set -Ux SSH_AUTH_SOCK $SSH_AUTH_SOCK
set -Ux SSH_AGENT_PID $SSH_AGENT_PID
set -Ux SSH_AUTH_SOCK $SSH_AUTH_SOCK
end
リモートをsshにリセットする
git remote set-url origin git@github.com:Jmzgit/Moving.git
サーバーは主要な更新を再度取得する必要があるようです