Git免密码提交-ssh密钥的生成与配置 | 一个计算机如何生成多个ssh密钥 | ssh相关疑问解答

Git免密码提交-ssh密钥的生成与配置

我们日常使用HTTPS进行代码的git push,往往需要我们验证远程仓库的账号密码,非常的繁琐,尤其是需要提交多个Git项目的时候。

而基于SSH的Git,为我们提供了SSH密钥,便于我们实现免密码级别的验证,实现一次配置,方便无忧

1. 生成Git密钥

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都按照下面继续

2. 在联网仓库(Gitee/GitHub)中配置公钥

2.1 复制生成的SSH公钥

# 还是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= 这里是你刚刚填的备注信息
"""

把这一串复制下来

2.2 联网仓库中配置密钥

这里以Gitee为例进行配置,GitHub也在设置中配置

Git免密码提交-ssh密钥的生成与配置 | 一个计算机如何生成多个ssh密钥 | ssh相关疑问解答_第1张图片

3. 其他注意事项

3.1 一个密钥可以用于不同的联网仓库

有些小伙伴不太明白,我生成一个密钥,能不能GitHub和Gitee直接都填写一个呢?

答案是可以,但是不推荐,包括官方其实也不推荐,所以一般我们会给不同的仓库设置不同的SSH密钥。

隔离风险:

如果使用相同的SSH密钥用于多个仓库,如果其中一个仓库的密钥泄漏或受到威胁,那么所有其他使用该密钥的仓库也会受到影响。而如果每个仓库都有自己的密钥,泄漏的风险就会被限制在一个仓库范围内。

不同仓库配置不同SSH见章节4

3.2 Git的密钥不要共享

Git的SSH密钥就相当于你的GitHub/Gitee/公司GitLab账号,一旦泄露,别人就可以对你仓库随意修改,所以一定不能共享!

4. 配置多个仓库的SSH-Key(win/linux通用)

看了1和2,那么有些小伙伴就要问了,那我如果公司用的Gitee或者自部署的GitLab

我自己偶尔要去Github 克隆项目玩,那我怎么配置两个密钥呢?

这不,解决方案就来了

4.1 ssh-keygen命令详解

熟悉Linux命令的,也许对ssh-keygen非常熟悉,他一般用于Linux配置ssh链接认证,而对于Windows的Git就相当于把命令封装起来了

这里我们来看看这个命令的详解

ssh-keygen [选项]

命令选项

  • -b:指定密钥长度;
  • -e:读取openssh的私钥或者公钥文件;
  • -C:添加注释;
  • -f:指定用来保存密钥的文件名;
  • -i:读取未加密的ssh-v2兼容的私钥/公钥文件,然后在标准输出设备上显示openssh兼容的私钥/公钥;
  • -l:显示公钥文件的指纹数据;
  • -N:提供一个新密语;
  • -P:提供(旧)密语;
  • -q:静默模式;
  • -t:指定要创建的密钥类型。

我们可以发现什么呢其实这个命令是可以指定密钥路径的!!

那我们刚刚为什么不指定,这样不是我们可以直接放到自己想要的目录嘛

其实是因为,Git默认的密钥文件就是以存放在 "用户家目录/.ssh/文件夹中"的密钥文件为准

Windows: C:\Users\用户名.ssh

Linux-Root用户: /root/.ssh

Linux-其他用户: /home/用户名/.ssh

另外,其实我们可以通过配置文件,对密钥文件进行配置

4.2 生成新的密钥文件

我们现在再额外生成一个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

4.3 配置密钥配置文件

需要在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)?

确认进行连接(yes/no)? -> 直接yes就行

Hi XXXX! You’ve successfully authenticated, but GitHub does not provide shell access

代表连接成功,就是ssh-key配置好了

Git分支介绍以及增删查改和合并,以及分支合并的冲突问题-如何使用 Git 进行代码提交、分支管理和冲突解决

你可能感兴趣的:(Django学习,综合学习,git,ssh,运维)