
リナックス
私の Linux システムでは、システムを起動するたびに秘密の SSH キーを復号化します。起動したら、ターミナルを開いて次のコマンドを発行します。
ssh-add ~/.ssh/id_rsa_some_key
git clone <git-url>
そして、などの git 操作を実行する準備が整いましたgit pull -a
。別のターミナルを開いて、このようなコマンドを再度発行すると、暗号化された ssh キーのパスワードの入力を求めるプロンプトは表示されません。要約すると、私の Linux システムでは、パスワードを 1 回入力するだけで済みます。
ウィンドウズ
私の仕事ではWindowsシステムを使用しています。起動したら、git バッシュそして問題:
eval $(ssh-agent)
そしてssh-add ~/.ssh/private_key
、パスワードを入力して、git リポジトリと通信できる git コマンドを発行します。Linux システムとは対照的に、新しい git-bash を開いて git コマンドを発行すると、パスワードの入力を求めるプロンプトが表示されます。要約すると、git-bash ターミナルで秘密鍵が復号化されると、git リポジトリと対話できますが、新しいターミナルを開くと、ssh キーを再度復号化する必要があります。
何を試したか
私はpageantを使用しようとしました。最初の問題は、id_rsaが適切ではなかったことです。puttygenを使用して新しいキーを作成する必要がありましたが、git@で始まるssh git urlを使用できないことが判明しました。https urlに置き換える必要がありましたが、それは私が望んでいることではありません。
どのような答えが好みか
以下の基準を満たす回答を希望します。
- Windows システムが起動し、git アクションを実行するためにターミナルが開かれたときに、SSH キーを一度復号化する必要があります。
- 新しいターミナルが開かれると、git リポジトリとの対話を継続できます。つまり、パスワードの入力を要求するプロンプトは表示されません。
- 私は git-bash にこだわっているわけではありません。Windows 上に最初の 2 つの条件を満たす別のターミナルがあれば、それで十分です。
答え1
コマンド
eval $(ssh-agent)
SSH エージェント プロセス (Pageant と同等) を開始し、通常は 2 つの環境変数 (SSH_AUTH_SOCK と SSH_AGENT_PID) を作成します (少なくとも Linux では、Windows git-bash がここで違いを生むかどうかはわかりませんが、おそらく違いはありません)。
SSH_AUTH_SOCK 変数が設定され、有効な認証エージェント ソケットを指している場合、変数を読み取ることができるすべてのプロセスでその変数を使用できます。したがって、この変数の値を 1 つの git-bash セッションから別のセッションに伝播させる方法が必要です。SSH_AGENT_PID 変数は、必要に応じてエージェントを簡単に終了できるようにするための便利な変数です。
これらの環境変数 (または SSH_AUTH_SOCK のみ) をファイルに保存して、後続の git-bash ウィンドウで読み取ることができる場合は、次のようにスクリプト化できます。
新しいgit-bashが起動されるたびに(つまり.bashrc
スクリプトまたはgit-bashの同等のものを使用して)
- SSHエージェント環境変数ファイルの存在を確認する
- ファイルが存在する場合:
- それを読んで
- ファイルにリストされているエージェントソケット(およびオプションでプロセス)がまだ存在する場合は、現在のセッションで変数をそのまま使用します。
- そうでない場合(つまり、ファイルが存在しないか、その情報が古い場合):
- 走る
eval $(ssh-agent)
- 新しいSSHエージェント環境変数ファイルを作成する
- 走る
- 終わり!
また、SSH git URL を完全な形式で入力する必要がある場合があります。つまり、 だけではなく[email protected]/project.git
、次のように入力する必要があります。
ssh://[email protected]/project.git
技術的には、プレフィックスのない形式は、ssh://
コマンド ラインで入力するのに便利な単なる省略形です。