git で SSH キーのパスフレーズを要求しないようにするにはどうすればよいですか?

git で SSH キーのパスフレーズを要求しないようにするにはどうすればよいですか?

私は git bash を使用しており、ssh-keygen を使用して ssh キーを設定していますが、リポジトリで何かを行うたびに、git からパスフレーズの入力を求められます/c/Users/jankiewj/.ssh/id_rsa。そのパスフレーズを無効にする方法はありますか。

編集: 仕事用のラップトップで Ubuntu を新規インストールしたばかりで、SSH キーにパスフレーズがある場合は常にパスフレーズが要求されるため、元のタイトルを編集しました (Windows を削除)。この問題を解決する方法も同じです。これはおそらく、Unix でもあり、同じ基本ツールを使用する MacOSX でも同じように機能します。

答え1

これは、git bash、Windows WLS、または実際の G​​NU/Linux 上の bash で実行できます。

eval `ssh-agent -s`
ssh-add ~/.ssh/*_rsa

2 番目のコマンドでパスフレーズが要求されますが、それだけです。実行する必要がある追加のアクション (以前はパスフレーズが必要でした) では、パスフレーズは要求されません (下のスクリーンショットの例を参照してください)。

Windows の git bash にパスフレーズを追加する

答え2

少し良くなり、恒久的な解決策Windowsでgit bashを開いたときにssh-agentを自動的に起動します。以下の内容を.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

この解決策はこのgithubヘルプ記事より

答え3

TDLR: Windowsユーザーの場合、

  • 走るssh-add "C:\\Users\\<your user>/.ssh/id_rsa"
  • ないssh-add ~/.ssh/id_rsa

たとえば、私はいつもこれを見ます:

$ ssh-add ~/.ssh/id_rsa
Enter passphrase for /c/Users/User/.ssh/id_rsa: 
Identity added: /c/Users/User/.ssh/id_rsa (/c/Users/User/.ssh/id_rsa)

$ git pull
Enter passphrase for key 'C:\Users\User/.ssh/id_rsa': 

パス区切り文字が一貫していないことに注意してください。ssh-agent は Unix パス区切り文字を使用して ~ を変換しますが、git は代わりに Windows パス区切り文字を使用します。ファイルのパスid_rsaがキーとして使用されていることを考えると、これがキャッシュが失われる理由です。

  • もう一つの違いはC://c/
  • 関連するコメント: git がパスフレーズを要求した場合、パスフレーズはキャッシュされないので、無期限に入力することができます。パスフレーズをssh-addonly に渡してみてください。
  • Windows では、 は~「多値」であると想定されるため、明示的に指定するのが最善です。
  • ssh-addは、 のようなデフォルトの場所を参照します~/.ssh/id_rsa。Windows では、これはあいまいであると想定します。デフォルトのパスに頼るのではなく、明示的にフォーマットされたパスを明示的に渡します。
    • ssh-add "C:\\Users\\<your user>/.ssh/id_rsa"つまり、@velval の回答でも同様です。

答え4

キーチェーンこの作業をインテリジェントに行うプログラムです。

これは .bashrc (または同等のもの) から実行する必要があり、ロードするキー以外の構成なしで環境を正しくセットアップします。

私が使用しているのは次のものです:keychain --quiet key1.pem key2.pem

シェルが Zsh であることを認識し、Bash を使用した場合とまったく同じように動作しました。

関連情報