windows下使用git时(我使用的是git bash软件),如果使用https协议,则每次远程操作都要输入用户名和密码(github/oschina),既繁琐又费时。如果使用git ssh 协议,虽然不用输入帐号密码,每次提交依然需要输入ssh的密钥密码,也是繁琐。ssh-keygen用于生成ssh证书,ssh-agent用于保存ssh密码。配置好这两个工具后,多次远程操作只需要一次认证。

下载安装git

个人只使用过git bash这个软件,其他未使用,不做评论,可以上http://git-scm.com查看并下载git。

配置git

配置git的email和name,不然不能push,把邮箱和用户名改成你自己的

  • 配置email:git config --global user.email 'xyz@xx.com'
  • 配置用户名: git config --global user.name 'myname'

生成ssh证书

安装完git之后,就需要生成ssh证书,我的是win10系统,其他系统未测试

1 打开git bash,输入以下命令,把your_email@example.com改成你的邮箱名

ssh-keygen -t rsa -b 4096 -C "your_email@example.com"

按照它的提示,确定ssh key存储的位置和设置密码,最终你可以看到~/.ssh下新生成了两个文件id_rsaid_rsa.pub

2 把ssh公钥添加到github/oschina用户账户。
git bash下,cat .ssh/id_rsa.pub,然后复制cat出来的内容(也可以用记事本打开),添加到github或者开源中国的ssh keys,如果公钥对不上,则无权限远程操作。

避免每次操作输入ssh密码

上面操作之后,虽然可以用ssh提交,但是每次操作都要输入ssh密码。ssh-agent可以解决这位问题。

1 在home目录下新建.bashrc文件:打开gi bash,输入touch ~/.bashrc
2 用记事本打开~/.bashrc,把以下代码复制到文件中,并保存。

# Note: ~/.ssh/environment should not be used, as it
# already has a different purpose in SSH.
env=~/.ssh/agent.env
# Note: Don't bother checking SSH_AGENT_PID. It's not used
# by SSH itself, and it might even be incorrect
# (for example, when using agent-forwarding over SSH).
agent_is_running() {
if [ "$SSH_AUTH_SOCK" ]; then
# ssh-add returns:
# 0 = agent running, has keys
# 1 = agent running, no keys
# 2 = agent not running
ssh-add -l >/dev/null 2>&1 || [ $? -eq 1 ]
else
false
fi
}
agent_has_keys() {
ssh-add -l >/dev/null 2>&1
}
agent_load_env() {
. "$env" >/dev/null
}
agent_start() {
(umask 077; ssh-agent >"$env")
. "$env" >/dev/null
}
if ! agent_is_running; then
agent_load_env
fi
# if your keys are not stored in ~/.ssh/id_rsa or ~/.ssh/id_dsa, you'll need
# to paste the proper path after ssh-add
if ! agent_is_running; then
agent_start
ssh-add
elif ! agent_has_keys; then
ssh-add
fi
unset env

3 关闭并重新打开git bash,输入ssh密码,以后远程操作都不需要输入密码了。