当前位置:   article > 正文

【多个ssh连接github】_github多个sshkey

github多个sshkey

ssh是什么

SSH 全称为:Secure Shell,是一种加密的网络传输协议,通过在网络中创建安全隧道来实现客户端与服务器之间的连接。SSH 在 数据传输 时基本上都采用对称加密方式,但是在进行 身份验证 时却需要采用非对称加密的形式,也就是 公钥—私钥对 的形式。

密钥对:在非对称加密技术中,有两种密钥,分为公钥和私钥。公钥是密钥对所有者持有,公布给他人的;私钥也是密钥对所有者持有,不可公布。
公钥:公钥用来给数据加密,用公钥加密的数据只能使用私钥解密。
私钥:如上,用来解密公钥加密的数据。
公钥和私钥是通过一种算法得到的一个密钥对(即一个公钥和一个私钥),将其中的一个向外界公开,称为公钥;另一个自己保留,称为私钥。通过这种算法得到的密钥对能保证在世界范围内是唯一的。公钥和私钥是成对的,它们互相解密(密钥指公钥或私钥,密钥对指公钥加私钥)。公钥和私钥都可以加密和解密。
使用这个密钥对的时候,如果用其中一个密钥加密一段数据,必须用另一个密钥解密。比如用公钥加密数据就必须用私钥解密,如果用私钥加密也必须用公钥解密,否则解密将不会成功。

密钥分为两种: 对称密钥 与 非对称密钥:
对称密钥加密,又称私钥加密或会话密钥加密算法,即信息的发送方和接收方使用同一个密钥去加密和解密数据。它的最大优势是加/解密速度快,适合于对大数据量进行加密,但密钥管理困难。

非对称密钥加密系统,又称公钥密钥加密。 它需要使用不同的密钥来分别完成加密和解密操作,一个公开发布,即公开密钥,另一个由用户自己秘密保存,即私用密钥。信息发送者用公开密钥去加密,而信息接收者则用私用密钥去解密。公钥机制灵活,但加密和解密速度却比对称密钥加密慢得多。
所以在实际的应用中,人们通常将两者结合在一起使用,例如,对称密钥加密系统用于存储大量数据信息,而公开密钥加密系统则用于加密密钥。
/密钥指的是私钥或者公钥—>密钥=私钥/公钥;密钥对,针对的是非对称加密—>密钥对=私钥+公钥。这样的话,整个思路就清晰了/

SSH 生成密钥对时可以使用多种加密算法,这些加密算法生成的最常用的密钥类型是 rsa 和 ed25519。
rsa:最常用的公钥加密算法,使用极其广泛,并且支持较好。密钥位数越多,安全性越好,但是性能会有所降低,常见的有 RSA 2048 和 RSA 4096 等。
ed25519:椭圆曲线算法生成的密钥,密钥长度短,安全可靠并且具有高性能。它的安全性在 RSA 2048 与 RSA 4096 之间,但是性能却在数十倍以上。

ssh生成密钥代码

打开C:\Users\ZC,其中ZC是本人用户明;在该文件下打开GIT bash here。输入:
下面展示一些 内联代码片

 # 生成 RSA 2048 密钥 |
$ ssh-keygen -t rsa -b 2048 -C "your@email.com" |
  • 1
  • 2
 #生成 RSA 4096 密钥 
$ ssh-keygen -t rsa -b 4096 -C "your@email.com" 

# 生成 ed25519 密钥 
$ ssh-keygen -t ed25519 -C "your@email.com" 

  • 1
  • 2
  • 3
  • 4
  • 5
  • 6

-t:选择生成密钥的类型
-b:设置密钥位数
-C:密钥注释,这里要改为你自己的邮箱地址

以生成密钥rsa 为例,执行以上命令后,会提示你设置密钥存储路径,按 Enter 默认即可(可自定义文件存储路径如 /c/Users/.ssh/zc-impro 否则默认是/c/Users/.ssh/id_rsa)。
然后会提示你设置密码,根据需要自行选择设不设置(不设置按 Enter 即可,已经非对称加密过,不设置也问题不大;设置的话安全性会提高,但是每次连接时需要输入密码,会麻烦一点)。

权限设置

在 Linux 中,还需要设置私钥文件的权限才可使用:

$ chmod 600 ~/.ssh/id\_ed25519
  • 1

密钥 自定义的文件配置

当需要配置多个ssh密钥时,为了方便管理,肯定需要对创建的密钥文件进行修改,比如上文将默认的存储文件/c/Users/.ssh/id_rsa修改为/c/Users/.ssh/zc-impro。因此,当修改后,需要修改配置文件才能正确匹配。
首先,先来验证下,在不配置config情况下的匹配效果。
第一步:获取公钥:

$ cat zc-impro.pub
  • 1

第二步:在 Github 或其他 Git 服务器新建 SSH Key
在 Github 个人的设置页,点击 “New SSH Key” 。取个名字,把上一步获取到的 SSH Key 拷贝进去。
第三步:匹配代码:

$ ssh -T git@github.com 
  • 1

在这里插入图片描述

密钥文件配置

从上面可以看到连接失败。因此需要配置连接的条件:
首先在.ssh中创建config文件,并使用vim打开config文件进行编辑

# 新建 config 文件
$ touch config
# 用 vim 编辑器打开 config 文件
$ vim config
  • 1
  • 2
  • 3
  • 4

在 config 文件 中,添加如下内容:

# zc-improving@github
Host zc-impro_github.com
HostName github.com
PreferredAuthentications publickey
IdentityFile ~/.ssh/zc-impro

# 如果生成多个 SSH-Key , 则按上面的格式继续往下写
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7

在这里插入发堆叠堆叠图片描述
其中,Host 是实际的主机名,当没有 HostName;Host是主机的昵称,HostName是实际的主机名。Host 和 HostName 填写 Git 服务器的域名,IdentityFile 指定私钥的路径(在生成 SSH-Key 时,我们已经指定该路径,拷贝确定的密钥文件过来即可)。
可参考:



|  | # ------------ 配置说明(始) ------------ |
|  |  |
|  | # Host:别名,HostName:服务器域名或 IP 地址 |
|  | # User:用户名 |
|  | # 例:在 git clone git@github.com:torvalds/linux.git 中 |
|  | # User 是 git,Host 是 github.com |
|  | # IdentityFile:私钥路径 |
|  |  |
|  | # ------------ 配置说明(末) ------------ |
|  |  |
|  |  |
|  | # ------------ 具体配置(始) ------------ |
|  |  |
|  | # GitHub 密钥 |
|  | Host github.com |
|  | HostName github.com |
|  | User git |
|  | PreferredAuthentications publickey |
|  | IdentityFile ~/.ssh/github\_ed25519 |
|  |  |
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22

接着按esc 退出编辑,shift+zz 保存并退出vim。重新输入测试连接:

$ ssh -T git@zc-imro_github.com 
  • 1

测试结果如下图,配置成功,就可以结束了。
在这里插入图片描述

多账号push问题

比如说,我有一个123@qq.com 和456@163.com两个github账号,同时也创建了zc-impro和zc-study分别与上面两个账号做了关联。两个账号都在同一台电脑,此时,使用两个进行push代码后,都是显示同一个账号的信息。如图所示:

在这里插入图片描述
在这里插入图片描述

可见,用两个密钥关联的账号提交的居然是一个人的信息。
通过多次实验后终于发现了奥秘:
因为在一开始我们设置了 全局的用户名称和全局用户邮箱:

$ git config --global user.name zc
$ git config -global user.eamil 123.qq.com
  • 1
  • 2

在提交时,系统会根据邮箱去写明提交者的信息。如果邮箱是假的,则只会显示用户名称,点击名字后,并不会跳转到该用户的github下。
因此,当有多个账户,或者公司电脑交接,需要将以下信息进行修改:

$ git config --global user.name 自己的名字
$ git config -global user.eamil  github邮箱
$ git config user.name 自己的名字
$ git config user.eamil  github邮箱
  • 1
  • 2
  • 3
  • 4

其中,global是全局,当某一个仓库没有设置自己的user.name和user.email时,使用的就是全局信息。 当仓库下的config 有设置的user.name和user.email时,则使用当前信息。

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/不正经/article/detail/450235
推荐阅读
相关标签
  

闽ICP备14008679号