windows git:添加SSH key

git如果使用https协议,每次push时都会提示输入用户名和密码,使用ssh秘钥(git协议)则可以避免这一麻烦。

配置方法:
1、进入目录~/.ssh

$ cd ~/.ssh

在windows下,这个目录一般为C:\Users\your_username.ssh

2、创建ssh key

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

代码参数含义:

-t 指定密钥类型,默认是rsa,可以省略。
-C 设置注释文字,比如邮箱。
-f 指定密钥文件存储文件名。

以上代码省略了 -f 参数,因此,运行上面那条命令后会让你输入一个文件名,用于保存刚才生成的ssh key代码,如:

Generating public/private rsa key pair.
# Enter file in which to save the key (/c/Users/you/.ssh/id_rsa): [Press enter]

若不输入直接按enter,则使用默认文件名(强烈建议这么做!!!!),并在~/.ssh目录下生成id_rsa和id_rsa.pub两个文件

然后会提示输入密码

Enter passphrase (empty for no passphrase): 
# Enter same passphrase again:

这个密码是每次push时需要输入的密码。同样地,也可以不输入密码,直接按回车跳过这个步骤,这样以后push的时候才能不用输密码

之后就会显示如下

Your identification has been saved in /c/Users/saltyfish/.ssh/id_rsa.
Your public key has been saved in /c/Users/saltyfish/.ssh/id_rsa.pub.
The key fingerprint is:
SHA256:BRxQ5G4VITTmcxEO9da8AL8MIg9Aw/2bRgQiR3D4Xto qxy65535@gmail.com
The key's randomart image is:
+---[RSA 2048]----+
|    .o. oO&+*=   |
|     .o..O+* + o |
|       .o.B.+..oo|
|        .=.= oo o|
|        So*.+. o.|
|         =+o.Eo .|
|        .  .   o |
|                 |
|                 |
+----[SHA256]-----+

3、添加ssh key到github
到key生成目录~/.ssh下找到id_rsa.pub文件并用编辑器打开,复制里面的内容;
在github->setting->SSH and GPG keys的SSH keys选择New SSH key,将从id_rsa.pub中复制到的内容粘贴进去并点击Add SSH key
add ssh key
这样就OK了

4、测试ssh key
在git bash中输入

$ ssh -T git@github.com

得到以下回应就算成功

$ ssh -T git@github.com
Hi qxy65535! You've successfully authenticated, but GitHub does not provide shell access.

5、使用ssh进行push
在git bash输入remote -v查看当前的remote url

$ git remote -v

若得到的连接是以https开头的,例如

origin  https://github.com/qxy65535/tfjs_test.git (fetch)
origin  https://github.com/qxy65535/tfjs_test.git (push)

说明此时是以https协议访问该仓库,若配完ssh key不想每次输密码,需要将它替换成git协议:

$ git remote set-url origin git@github.com:qxy65535/tfjs_test.git

以后再用git push就不需要密码了

遇到的问题

1、使用ssh -T出现Permission denied (publickey).
原因:SSH密钥对不匹配。这个错误主要密匙全路径名不相符,结果导致本地的SSH工具无法找到到正确的密匙。
解决:首先检查步骤2中生成的两个文件是否确实在~/.ssh路径下,如过不是,把它们移过去。
其次是非常重要的一点,如果你在步骤2中自定义了ssh key的文件名,那么原因就在于你的命名与ssh内设定的名字不一致,因此需要手动添加秘钥。很多教程大概不是windows系统。。直接让输入命令

$ ssh-add ~/.ssh/你的文件名

于是就有了问题2

2、执行ssh-add时出现Could not open a connection to your authentication agent
其实应该将自定义名字的秘钥交给ssh-agent管理:GitHub help:Generating a new SSH key and adding it to the ssh-agent

# start the ssh-agent in the background
$ eval $(ssh-agent -s)
Agent pid 59566
$ ssh-add ~/.ssh/id_rsa

但是这样很麻烦,难道每次重启git bash都要打这么一套前奏吗??
当然不会,所以可以把这段代码加入到git bash的启动脚本中去。
使用编辑器打开Git安装目录下的etc/bash.bashrc文件,在末尾添加两行

eval "$(ssh-agent -s)"
ssh-add ~/.ssh/你的文件名

保存退出即可。

用ssh-add除了能更改ssh秘钥的文件名,也完全可以用来更改秘钥的路径,比如ssh-add your_path/your_key

遇到的问题都是起源于给ssh key文件自定义了一个文件名。。所以没什么特殊要求的话,还是一路enter使用默认吧_(:3」∠)_

posted @ 2018-10-26 11:22  sssaltyfish  阅读(408)  评论(0编辑  收藏  举报