在本地使用git提交代码到Github上时总是需要输入密码,本文介绍了一种通过配置SSH实现免密提交代码到github的方式。
-
首先检查当前用户家目录下是否有名为
.ssh
的文件夹;如果不存在,则新建一个;如果存在,查看该目录下是否存在已经生成的密钥对。公钥文件的名称一般如下:
- id_dsa.pub
- id_ecdsa.pub
- id_ed25519.pub
- id_rsa.pub
其对应的私钥文件的名称一般如下:
- id_dsa
- id_ecdsa
- id_ed25519
- id_rsa
如果有已经存在的密钥对的话,可以使用已经存在的密钥对;如果要对已经存在的密钥的密码进行更改的话,可以使用如下命令:
$ ssh-keygen -p Enter file in which the key is (/c/Users/Bob/.ssh/id_rsa): /c/Users/Bob/.ssh/id_ecdsa Enter old passphrase: Key has comment 'your_email@exmail.com' Enter new passphrase (empty for no passphrase): Enter same passphrase again: Your identification has been saved with the new passphrase.
如果不存在密钥对或者想使用新的密钥对的话,请按照步骤二的操作生成新的密钥对。
-
打开 Git Bash,将操作目录切换到当前用户家目录下的
.ssh
目录下,然后执行如下命令:$ ssh-keygen -t rsa -b 4096 -C "your_email@example.com"
其中,
-t
参数用于指定生成密钥时所用的加密算法,-b
参数用于指定密钥的长度(注意:不同的加密算法可以指定的密钥的长度有所不同),-C
参数用于指定密钥的标签。上述命令会生成一个以
your_email@example.com
为标签的密钥对,在生成的过程中会提示你输入用于保存密钥的文件的名称及路径(可以使用默认名称和路径),以及是否需要使用密码进行加密。 -
使用文本编辑器打开上步中生成的公钥文件,然后复制其中的所有内容;打开Github的SSH管理界面,添加一个密钥,名称随便设置,其中密钥的内容为已经复制好的公钥的内容,粘贴并保存即完成了密钥的添加。
-
在Git Bash中输入如下命令,启动SSH代理服务:
$ eval $(ssh-agent -s) Agent pid 59678
使用如下命令将已经生成的私钥添加到SSH代理中:
$ ssh-add ~/.ssh/id_rsa # id_rsa 为私钥文件的名称
-
创建自启动SSH代理的脚本,方法如下:
在当前用户主目录下创建一个名为
.profile
的文件,输入如下内容后保存: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时都自动启动SSH代理服务。
-
关闭Git Bash并重新启动,会要求输入创建密钥对时设置的密码,输入正确的密码之后,就可以实现免密提交到Github的功能。