純粋なGit Bashを使用したいとしますTortoiseGitやPuTTYを使用せずにのみのソリューション。また、パスフレーズなしでSSH鍵を生成した場合とほとんど同じであるため、パスフレーズを永続的に保存する必要はありません。しかし、それでも、いくつかのキャッシングを使用する必要があります。
キャッシュの目的ssh-agent
で、Git Bashディストリビューションに含まれているプロセスが使用されます。このプロセスはデフォルトでは開始されないため、最初に起動する必要があります。SSHキーをキャッシュするには、これらのキーをこのプロセスに追加する必要がありますssh-add
は、キーのパスフレーズの入力を求めてメモリに保存するコマンドを使用ます。
他のソリューションの欠点:
- GitHubの記事の
ssh-agent
ように自動起動すると、このセッションでSSHキーを使用する必要があるかどうかに関係なく、Git Bashを起動すると、最初からパスフレーズが要求されます。今日ローカルリポジトリで作業している場合は、本当に必要な場合(たとえば、リモートリポジトリと対話する場合)にのみパスフレーズを提供することをお勧めします。
- GitLabの記事で「いいね!」を起動する
ssh-agent
と、おそらく毎回それを入力するのにうんざりします。おそらく、最終的には、これらの2行をeval $(ssh-agent -s)
.bashrc
して自動起動する可能性があります。欠点は上記と同じですが、追加の1つがあります。新しいGit Bashターミナルを起動するたびに、追加のssh-agentプロセスが取得されます(GitHubのbashスクリプトは、そのプロセスがすでに開始されているかどうかをチェックします)。
- 上記の2つと同様ですが、特に、GitHub用とGitLab用の別のホストに個別のSSHキーがある場合は、一度にすべてを提供するのは面倒で不便です。
したがって、このソリューションは、Git BashがWindowsセッションごとに1回だけ、本当に必要なときにだけパスフレーズを要求するようにする方法を知りたい人のためのものです。GnuPGコミットによるパスフレーズ管理の動作に似ていますを使用して自動署名をdefault-cache-ttl
。
必要に応じてGit Bashのみを使用して、パスフレーズを1回要求するようにSSHを構成する
まず、ssh-agent
Git Bashシェルを起動するときにを自動起動します。そのために、変更されたGitHubのスクリプトを使用します。これは、プロセスがすでに開始されているかどうかをチェックするためですが、ssh-add
すぐにキーを押したくありません。このスクリプトは、~/.bashrc
orまたは~/.profile
orに移動します~/.bash_profile
(~
ユーザーのホームディレクトリのようにC:\Users\Username
–実行cd ~
してからpwd
、Git Bashで出力します)。
### Start ssh-agent
env=~/.ssh/agent.env
agent_load_env () { test -f "$env" && . "$env" >| /dev/null ; }
agent_start () {
(umask 077; ssh-agent >| "$env") # use -t here for timeout
. "$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
fi
unset env
次に、~/.ssh/config
ファイルを編集または作成し、AddKeysToAgent
キャッシュをオンにするホストスタンザごとにオプションを追加します(すべてのホスト宣言の前にファイルの先頭にディレクティブを配置して、グローバルにオンにすることもできます)。
# GitHub.com
Host github.com
Preferredauthentications publickey
IdentityFile ~/.ssh/id_ed25519_github
AddKeysToAgent yes
# GitLab.com
Host gitlab.com
Preferredauthentications publickey
IdentityFile ~/.ssh/id_ed25519_gitlab
AddKeysToAgent yes
ssh config man ページから:このオプションがyesに設定されていて、キーがファイルから読み込まれる場合、ssh-add(1)の場合と同様に、キーとそのパスフレーズがデフォルトのライフタイムでエージェントに追加されます。
デフォルトの最大存続期間は、永久に、またはssh-agent
プロセスが強制終了されるまでです(タスクマネージャーから手動で、またはPCがシャットダウンされたとき)。有限のタイムアウトを使用したい場合は、ssh-agentの-t
パラメーターで設定できます。上記の最初のステップからbashスクリプトの行を変更します。たとえば、キーキャッシュの有効期間を30分間にします。
(umask 077; ssh-agent -t 30m >| "$env")
その他の時刻形式修飾子については、こちらをご覧ください。