我们日常使用HTTPS进行代码的git push,往往需要我们验证远程仓库的账号密码,非常的繁琐,尤其是需要提交多个Git项目的时候。
而基于SSH的Git,为我们提供了SSH密钥,便于我们实现免密码级别的验证,实现一次配置,方便无忧
Windows我们可以在任意位置打开Git Bash 或者使用 shell/cmd直接使用git命令
Tips:
如果你已经生成过密钥,Git会提示,是否要覆盖原本的,直接填写yes就行
# 命令格式
ssh-keygen -t [指定密钥类型(一般是rsa)] -C [为密钥添加备注信息]
# eg:
ssh-keygen -t rsa -C "[email protected]" # 生成rsa加密密钥
# 还有其他的一般常用的密钥类型:dsa | ecdsa | ed25519 | rsa
# 但是一般我们使用rsa就可以
# 重点:
命令回车后的提示:
-> Enter file in which to save the key (一个文件目录.ssh/id_rsa): # 这里需要回车,是告诉你创建在哪个目录,方便你去找。
-> Enter passphrase (empty for no passphrase): # 这里让你配置密码短语,最好不要配置,不然每次push的时候还是需要输入这个。
# 如果你更注重安全就配置,但是我们这里为了方便不配置,不配置直接回车就行。
-> Enter same passphrase again: # 确认下密码短语,没配置了话,继续回车就行。
-> Your identification has been saved in 一个文件目录.ssh/id_rsa # 这就是创建成功了,这个 id_rsa就是私钥的路径
-> Your public key has been saved in 一个文件目录.ssh/id_rsa.pub # .pub的就是公钥,都在一个文件夹
# 如果报错了这个 Saving key "XXXXX" failed: No such file or directory
# 这是说明你没有这个.ssh目录,你需要按以下操作
mkdir ~/.ssh # 在用户根目录创建.ssh目录
# 我们接下来要用的就是公钥,不管是windows还是linux都按照下面继续
# 还是Git shell执行
cd ~/.ssh # 切换到Git的根目录ssh
cat id_rsa.pub # 查看公钥文件
"""
ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABgQDwqrC/+iN5QCYXDVptT43AGf+/mU85SfCHeGnvuBW+yYFcNTbVm9/BkQ1Jay3O6Xxt/QEVs9HVOcLe8RCxjsC+zVE+jjKFyYSEYKqV8N7U410nXvYqIQusA+MD976Y3qnyfEydERlIw0cPDqq4UBZRYB5PRCBZX/FnMUXtgTVIZWpxoVkoKxavRbUtQlm68bkYy/vnoxGH/HCtoiWD+FkiQYddC1BsOvlvMK9/4Hjj4OSrQ01hhqB/ytTPDI0rIGzD33uQNLkrZZe1Rmy7zPesAqcOvMC0i2bH5CLfk5WTzJUKl2CS3RbFLEjFudh3OKC5wuU61O67TZj+uxMeBT+4MxUJTXfoxZnHH5XxrIkXLOxmK6FPvJod5Z9+oKSincoM9wjdDvNp4gu6xEY6ysgKNC3NRPEn83ap5w4W0nu/M0NwpSiZp2Mfz4zJHAGxYxDoYyiou5EYmMfOzLTxcbaYqyaDvmyOuNLfJS4UVHGhGjN7OILhxQ32knsHL3vZlJ0= 这里是你刚刚填的备注信息
"""
把这一串复制下来
这里以Gitee为例进行配置,GitHub也在设置中配置
有些小伙伴不太明白,我生成一个密钥,能不能GitHub和Gitee直接都填写一个呢?
答案是可以,但是不推荐,包括官方其实也不推荐,所以一般我们会给不同的仓库设置不同的SSH密钥。
隔离风险:
如果使用相同的SSH密钥用于多个仓库,如果其中一个仓库的密钥泄漏或受到威胁,那么所有其他使用该密钥的仓库也会受到影响。而如果每个仓库都有自己的密钥,泄漏的风险就会被限制在一个仓库范围内。
不同仓库配置不同SSH见章节4
Git的SSH密钥就相当于你的GitHub/Gitee/公司GitLab账号,一旦泄露,别人就可以对你仓库随意修改,所以一定不能共享!
看了1和2,那么有些小伙伴就要问了,那我如果公司用的Gitee或者自部署的GitLab
我自己偶尔要去Github 克隆项目玩,那我怎么配置两个密钥呢?
这不,解决方案就来了
熟悉Linux命令的,也许对ssh-keygen非常熟悉,他一般用于Linux配置ssh链接认证,而对于Windows的Git就相当于把命令封装起来了
这里我们来看看这个命令的详解
ssh-keygen [选项]
命令选项
我们可以发现什么呢,其实这个命令是可以指定密钥路径的!!
那我们刚刚为什么不指定,这样不是我们可以直接放到自己想要的目录嘛
其实是因为,Git默认的密钥文件就是以存放在 "用户家目录/.ssh/文件夹中"的密钥文件为准
Windows: C:\Users\用户名.ssh
Linux-Root用户: /root/.ssh
Linux-其他用户: /home/用户名/.ssh
另外,其实我们可以通过配置文件,对密钥文件进行配置
我们现在再额外生成一个GitHub的密钥来测试
# 指定目录生成一个GitHub用的密钥
# 命令格式
ssh-keygen -t [指定密钥类型(一般是rsa)] -C [为密钥添加备注信息] -f [指定密钥保存路径](要和第一次生成的不一样的路径)
# eg:
ssh-keygen -t rsa -C "[email protected]" -f "~/.ssh/github_id_rsa" # 指定生成密钥为~/.ssh/github_id_rsa文件
# 这是会在.ssh目录生成两个文件
# 公钥: github_id_rsa.pub
# 私钥: github_id_rsa
需要在ssh目录下,创建一个config文件
# 命令
touch ~/.ssh/config # 创建配置文件
配置文件的内容
# 别名为gitee.com的主机使用默认密钥(~/.ssh/id_rsa)
Host gitee.com
HostName gitee.com
PreferredAuthentications publickey
# 这里不填写IdentityFile默认就是 ~/.ssh/id_rsa
# 别名为github.com的主机使用特定密钥(~/.ssh/github_id_rsa)
Host 别名为github.com
HostName github.com
PreferredAuthentications publickey
User git
IdentityFile ~/.ssh/github_id_rsa # IdentityFile参数定义密钥路径
# 其他配置文件参数
# Host Host可以看作是一个你要识别的模式,对识别的模式,进行配置对应的的主机名和ssh文件
# HostName 要登录主机的主机名
# User 登录名
# PreferredAuthentications publickey,password,keyboard-interactive
# 首选身份验证,有三个选项:publickey(公钥,密码,键盘输入),这里选择publickey公钥
# IdentityFile 指明上面User对应的identityFile路径
配置完成后,我们将密钥添加到GitHub还有刚刚配置过的Gitee就可以了
下面命令可以测试连通性
ssh -T [email protected] //github的检测
ssh -T [email protected] //gitee的检测 其他的类似,换个host就可以
执行以后会有以下的提示:
Are you sure you want to continue connecting (yes/no)?
# 确认进行连接(yes/no)? -> 直接yes就行
Hi XXXX! You've successfully authenticated, but GitHub does not provide shell access
# 代表连接成功,就是ssh-key配置好了
Are you sure you want to continue connecting (yes/no)?
Hi XXXX! You’ve successfully authenticated, but GitHub does not provide shell access
Git分支介绍以及增删查改和合并,以及分支合并的冲突问题-如何使用 Git 进行代码提交、分支管理和冲突解决