Gitがssh鍵のパスフレーズを要求し続ける


538

githubチュートリアルの指示に従ってキーを作成し、それをgithubに登録して、ssh-agentを明示的に使用してみました。それでも、プルまたはプッシュしようとするたびに、gitはパスフレーズを要求し続けます。

原因は何でしょうか?


回答:


1039

SSHエージェントを起動したら:

eval $(ssh-agent)
  1. 秘密鍵を追加する必要があります:

    ssh-add
    

    これにより、パスフレーズが1回だけ要求されます。公開鍵をGithubにアップロードした場合は、プッシュを許可する必要があります。

  2. macOSでキーを永続的に保存するには:

    ssh-add -K  
    

    これは、ユーザーのキーチェーンに保存することにより、いったん閉じて再度開いた後も保持されます。


16
サーバーからログアウトし、sshで戻って実行しgit pull、もう一度パスワードの入力を求めます。
cyber8200 2016年

35
ssh-add -Kユーザーのキーチェーンに保存することにより、いったん閉じて再度開いた後も保持されます。
カーク

72
@Kirkはssh-add -K以下を与える:unknown option -- K usage: ssh-add [options] [file ...] Options: -l List fingerprints of all identities. -L List public key parameters of all identities. -k Load only keys and not certificates. -c Require confirmation to sign using identities -t life Set lifetime (in seconds) when adding identities. -d Delete identity. -D Delete all identities. -x Lock agent. -X Unlock agent. -s pkcs11 Add keys from PKCS#11 provider.
サンディープC

13
それでも、パスフレーズの入力を求められます。
IgorGanapolsky 2017年

21
-Kアップル固有です。help.github.com/articles/…を
bkdir 2018

238

これは、OS X El Capitan(10.11)からmacOS Sierra(10.12)にアップグレードしてから、再起動後に私に起こっています。ssh-add解決策は一時的に働いていたが、別の再起動の間で保持されません。

永続的な解決策は~/.ssh/configUseKeychainオプションを編集(または作成)して有効にすることでした。

Host *
    UseKeychain yes

関連:Sierraにアップデートしてから、macOSがsshパスフレーズを尋ね続ける


1
おかげで私のために働いた...私はやった... ssh-add -K /Users/***/.ssh/git/id_rsaしかしそれはターミナルの再起動後もまだ機能していなかった...ありがとう。
nawlbergs 2017年

2
なぜこれが起こるのか?OpenSSHは変更にテクニカルノートを読むdeveloper.apple.com/library/content/technotes/tn2449/...
samwize

62

あなたが試した場合ssh-add、あなたはまだあなたのパスフレーズを入力するように求めている、次に使用してみてくださいssh-add -K。これにより、パスフレーズがキーチェーンに追加されます。

更新:macOS Sierraを使用している場合、上記が機能しなくなる可能性があるため、別の手順を実行する必要がある可能性があります。次のものをに追加します~/.ssh/config

Host *
  UseKeychain yes

2
それでもパスフレーズの入力を求められます。
IgorGanapolsky 2017年

@IgorGanapolsky macOS Sierraを使用していますか?もしそうなら、私が答えに追加したものをチェックしてください。お役に立てば幸いです。
Darryl Young

2
はい、私はシエラにいます。ただし、ここでも私のために働いた行があります:AddKeysToAgent yes
IgorGanapolsky 2017年

1
これは、BitBucket Cloudでも機能します。GitKrakenで問題が発生したため、問題は解決しました。
マラキ

54

私は以下を試します:

  1. GitBashを起動する
  2. ~/.bashrcファイルを編集する
  3. 次の行をファイルに追加します

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
  1. ファイルを保存して閉じます
  2. GitBashを閉じる
  3. GitBashを再度開く
  4. パスフレーズを入力してください

4
将来の参考のために、これはでも機能しzshます。これを追加するだけ.zshrc
Arda

2
これは、キーファイルがと呼ばれていることを前提としていますid_rsa。カスタム名がある場合は、例を使用する必要があります。/usr/bin/ssh-add ~/.ssh/custom_filename
Juha Untinen

2
このスクリプトに何が起こるか説明できますか?
LeeR 2018年

2
@Leeまだ実行されていない場合はssh-agentを起動します。これにより、プッシュするたびに(多かれ少なかれ)sshパスフレーズを尋ねないようになります。
Roland

これは、ssh-agentを実行し、ログインごとにキーを追加するだけです。ログインするたびにパスワードを入力する必要があります。たとえば、ssh-ingスクリプトを実行してGITコマンドを実行している場合、残念ながらこれはまったく役に立ちません。
trainoasis


27

これを〜/ .ssh / configに追加してみてください:

Host *
   AddKeysToAgent yes
   UseKeychain yes
   IdentityFile ~/.ssh/id_rsa

...秘密鍵の名前がid_rsaであると仮定します


11
UseKeychain yesはMacでのみ有効です
Oz123 '13

3
@ Oz123ウィンドウに相当するもの
IgorGanapolsky 2018

Oz123 I @ Windows上で同等のAddKeysToAgentがはい、この答えのチェックだと思うstackoverflow.com/questions/52423626/...
fedeteka

6

同様の問題がありましたが、他の回答では問題を解決できませんでした。他の誰かが私のようなねじれた設定をしている場合に備えて、私は先に進んでこれを投稿すると思いました。

複数のキーがあり、Gitが最初に間違ったキーを使用していたことがわかりました。パスフレーズの入力を求められ、それを入力すると、Gitは機能する別のキーを使用します(パスフレーズを入力する必要がなかったため)。

パスフレーズの入力を求めるために使用していたキーを削除したところ、機能するようになりました。


5

SSH-Agent自体に問題があるようです。トラブルシューティングしてみます。

1)SSHにキーを追加するためにssh-addを実行しましたか?

2)使用の合間にターミナルウィンドウを閉じていますか。ウィンドウを閉じると、ウィンドウを再び開くときにパスワードを再入力する必要があるためです。


2
最初の問題Jeff Wellingを解決する方法に関する情報を追加するとよいでしょう。
ranu

5

上記の解決策が私にとってうまくいかない場合、チェックすべきことの1つは、あなたが実際に公開鍵も持っていることです(通常id_rsa.pub)。珍しいことではありませんが、それが原因でした。

秘密鍵から公開鍵を作成するには:

ssh-keygen -y -f ~/.ssh/id_rsa > ~/.ssh/id_rsa.pub

1

私は別の解決策を試しますが、何の助けにもなりません。しかし、Bitbucket.com seamsからのこの手順(私のGitBash SSH環境は常にパスフレーズを要求します。どうすればよいですか?)はうまく機能します。

アイデアは:

  1. あなたは~/.bashrcファイルを作成します

  2. フォロースクリプトを追加:

    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
    
  3. バッシュを再実行


1

上記に記載されていない別の可能な解決策は、次のコマンドでリモコンを確認することです。

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
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.