Working with git and ssh

导语
从2021年8月14日之后,使用git对github进行身份验证操作的时候不再接受使用账号密码形式clone和push代码,必须使用acces_token或者基于SSH 的方式了。本文记录SSH 的使用过程。

一、生成shh密钥

进入 .ssh 目录,windows下一般在默认用户文件夹下 Users/Administrator/.ssh

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
cd C:\Users\Administrator\.ssh

ssh -V # 查看版本号,确认是否安装ssh

ssh-keygen -t rsa -C "email@abc.com" # 生成ssh密钥

Generating public/private rsa key pair.
Enter file in which to save the key (/c/Users/Administrator/.ssh/id_rsa): id_rsa_pubrepo # 此处输入密钥的名称,方便后面管理多个密钥
Enter passphrase (empty for no passphrase):# 回车
Enter same passphrase again:# 回车
Your identification has been saved in id_rsa_pubrepo.
Your public key has been saved in id_rsa_pubrepo.pub.
The key fingerprint is:
SHA256:xxxxxxxxxxxxx email@abc.com
The key's randomart image is:
+---[RSA 3072]----+
| . . . |
| o = oo. |
| . ..*+. . |
| . .o.B.* |
| . *.E=o |
| ..+*B= |
+----[SHA256]-----+

二、将公钥部署到github

查看并复制公钥内容。

1
2
3
cat id_rsa_pubrepo.pub # 查看公钥,注意是.pub后缀的文件

cat id_rsa_pubrepo.pub | clip # windows下复制文件内容到剪贴板

登录github,点击头像;

在Settings -> SSH and GPG keys 设置项中;

点击New SSH key,粘贴刚才复制的内容(“ ssh-rsa AAA…..= ”),并输入名称。

至此,你就可以clone和push该github账户下的所有的仓库内容了。

PS:远程地址一定要用ssh地址 git@github.com:XXX/XXX.git ,而不是HTTPS地址。

三、管理多个ssh密钥

1、多个ssh部署到多个github账户

因为每个ssh key只能在github上部署一次,如果我们要管理多个github账号,那么就必须生成多个 ssh key,并且用 config 来管理,这样在进行仓库操作的时候,git才知道该使用那么key。

假如我们有两个 github账号:Account01,Account02;

首先创建两个 ssh key:id_rsa_mykey01,id_rsa_mykey02

在 .ssh 目录下创建 config 文件:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
# 为每个ssh key配置一个Host,每个Host要取一个别名,每个Host主要配置HostName和IdentityFile两个属性即可
# Host的名字可以取为自己喜欢的名字,不过这个会影响git相关命令,例如:
# Host mygithub 这样定义的话,命令如下,即git@后面紧跟的名字改为mygithub
# git clone git@mygithub:PopFisher/AndroidRotateAnim.git
# HostName         这个是真实的域名地址
# IdentityFile         这里是id_rsa的地址, # 可以指定特定的ssh私钥文件
# PreferredAuthentications 配置登录时用什么权限认证--可设为publickey,password publickey,keyboard-interactive等
# User            配置使用用户名

# Host01
Host Host01
HostName github.com
PreferredAuthentications publickey
IdentityFile ~/.ssh/id_rsa_mykey01

# Host02
Host Host02
HostName github.com
PreferredAuthentications publickey
IdentityFile ~/.ssh/id_rsa_mykey02

以上我们配置了2个 Host:

host01 对应 id_rsa_mykey01 ,id_rsa_mykey01.pub 配置到github 的账号 Account01的 SSH and GPG keys 中;

host02 对应 id_rsa_mykey02 ,id_rsa_mykey02.pub 配置到github 的账号 Account02的 SSH and GPG keys 中。

假如我们 clone Account01 的 mydemo 项目,我们会得到克隆地址 git@github.com:Account01/mydemo.git ,不能直接使用,需要把改为 git@Host01:Account01/mydemo.git ,也就是说我们的git项目的远程HostName,以及认证文件的配置采用.ssh config 中的Host01,账号Account02的项目同理。

至此,我们在同一台电脑上,用多个ssh key 分别管理了多个github 账号中的仓库文件。

2、为单个repository部署Deploy key

有的项目是小组多人协同开发的,同一个github下有多个项目,那么如何给每一个仓库设置单独的ssh key呢?

我们需要配置 Deploy keys。

打开仓库的 Settings (不同与账户的 Setting),在Deploy keys 设置项中点击 add deploy key 添加。

至此,我们的账户中配置了 ssh key,用该 key 配对的私钥,可以操作该账户下的所有的仓库的代码。

而仓库单独设置的 Deploy key 对于的私钥,只能访问和操作该仓库,对其他仓库没有权限。

总结

github已经不再接受使用账号密码形式。

ssh key配置方法可以免登录账号密码。

多个ssh key,需要用config 来配置。

账户中配置的 ssh key,可以操作该账户下的所有的仓库的代码。

仓库的 Deploy key 只能操作该仓库。

------------- 感谢您的阅读-------------
作者dreamingpoet
有问题请发邮箱 Dreamingoet@126.com
您的鼓励将成为创作者的动力