Windows下配置Git中ssh-agent自动启动

hero-circuit-bg.svg

默认情况下,如果我们要经常在 Git Bash 中运行命令以推送更新到远程仓库,则在每次推送时 SSH 客户端每次都会让我们输入密钥的密码,这很是让人不爽啊。解决方法就是让 ssh-agent 自动启动,常驻内存,直至我们注销当前用户或者关闭计算机。

创建.profile文件

打开 Git Bash,键入

1
pwd

确认当前是在 /c/Users/username 路径下

然后,输入

1
touch ~/.profile

在路径下 /c/Users/username 路径下创建一个 .profile 文件

如果此路径下已经有这个文件,则无需新建。

设置.profile

使用文本编辑器打开 .profile,将以下内容粘贴到其中保存。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
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

完事儿之后重启 Git Bash 即可。

如此以来,以后即使 Git Bash 被关闭,ssh-agent 也将一直常驻内存,除非我们结束其进程、注销当前用户或者关闭计算机。

小问题

默认情况下,SSH 的私钥是被保存在 ~/.ssh/ 路径下。如果你的私钥不是在这个路径,那么你需要告诉 SSH 客户端在哪儿找到它。

在 Git Bash 中运行以下命令即可

1
ssh-add ~/path/to/my_key

参考