windows下我使用git bash,安装方法请自行了解。
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
这样就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」∠)_