赞
踩
SSH 全称为:Secure Shell,是一种加密的网络传输协议,通过在网络中创建安全隧道来实现客户端与服务器之间的连接。SSH 在 数据传输 时基本上都采用对称加密方式,但是在进行 身份验证 时却需要采用非对称加密的形式,也就是 公钥—私钥对 的形式。
密钥对:在非对称加密技术中,有两种密钥,分为公钥和私钥。公钥是密钥对所有者持有,公布给他人的;私钥也是密钥对所有者持有,不可公布。
公钥:公钥用来给数据加密,用公钥加密的数据只能使用私钥解密。
私钥:如上,用来解密公钥加密的数据。
公钥和私钥是通过一种算法得到的一个密钥对(即一个公钥和一个私钥),将其中的一个向外界公开,称为公钥;另一个自己保留,称为私钥。通过这种算法得到的密钥对能保证在世界范围内是唯一的。公钥和私钥是成对的,它们互相解密(密钥指公钥或私钥,密钥对指公钥加私钥)。公钥和私钥都可以加密和解密。
使用这个密钥对的时候,如果用其中一个密钥加密一段数据,必须用另一个密钥解密。比如用公钥加密数据就必须用私钥解密,如果用私钥加密也必须用公钥解密,否则解密将不会成功。
密钥分为两种: 对称密钥 与 非对称密钥:
对称密钥加密,又称私钥加密或会话密钥加密算法,即信息的发送方和接收方使用同一个密钥去加密和解密数据。它的最大优势是加/解密速度快,适合于对大数据量进行加密,但密钥管理困难。
非对称密钥加密系统,又称公钥密钥加密。 它需要使用不同的密钥来分别完成加密和解密操作,一个公开发布,即公开密钥,另一个由用户自己秘密保存,即私用密钥。信息发送者用公开密钥去加密,而信息接收者则用私用密钥去解密。公钥机制灵活,但加密和解密速度却比对称密钥加密慢得多。
所以在实际的应用中,人们通常将两者结合在一起使用,例如,对称密钥加密系统用于存储大量数据信息,而公开密钥加密系统则用于加密密钥。
/密钥指的是私钥或者公钥—>密钥=私钥/公钥;密钥对,针对的是非对称加密—>密钥对=私钥+公钥。这样的话,整个思路就清晰了/
SSH 生成密钥对时可以使用多种加密算法,这些加密算法生成的最常用的密钥类型是 rsa 和 ed25519。
rsa:最常用的公钥加密算法,使用极其广泛,并且支持较好。密钥位数越多,安全性越好,但是性能会有所降低,常见的有 RSA 2048 和 RSA 4096 等。
ed25519:椭圆曲线算法生成的密钥,密钥长度短,安全可靠并且具有高性能。它的安全性在 RSA 2048 与 RSA 4096 之间,但是性能却在数十倍以上。
打开C:\Users\ZC,其中ZC是本人用户明;在该文件下打开GIT bash here。输入:
下面展示一些 内联代码片
。
# 生成 RSA 2048 密钥 |
$ ssh-keygen -t rsa -b 2048 -C "your@email.com" |
#生成 RSA 4096 密钥
$ ssh-keygen -t rsa -b 4096 -C "your@email.com"
# 生成 ed25519 密钥
$ ssh-keygen -t ed25519 -C "your@email.com"
-t:选择生成密钥的类型
-b:设置密钥位数
-C:密钥注释,这里要改为你自己的邮箱地址
以生成密钥rsa 为例,执行以上命令后,会提示你设置密钥存储路径,按 Enter 默认即可(可自定义文件存储路径如 /c/Users/.ssh/zc-impro 否则默认是/c/Users/.ssh/id_rsa)。
然后会提示你设置密码,根据需要自行选择设不设置(不设置按 Enter 即可,已经非对称加密过,不设置也问题不大;设置的话安全性会提高,但是每次连接时需要输入密码,会麻烦一点)。
权限设置
在 Linux 中,还需要设置私钥文件的权限才可使用:
$ chmod 600 ~/.ssh/id\_ed25519
当需要配置多个ssh密钥时,为了方便管理,肯定需要对创建的密钥文件进行修改,比如上文将默认的存储文件/c/Users/.ssh/id_rsa修改为/c/Users/.ssh/zc-impro。因此,当修改后,需要修改配置文件才能正确匹配。
首先,先来验证下,在不配置config情况下的匹配效果。
第一步:获取公钥:
$ cat zc-impro.pub
第二步:在 Github 或其他 Git 服务器新建 SSH Key
在 Github 个人的设置页,点击 “New SSH Key” 。取个名字,把上一步获取到的 SSH Key 拷贝进去。
第三步:匹配代码:
$ ssh -T git@github.com
从上面可以看到连接失败。因此需要配置连接的条件:
首先在.ssh中创建config文件,并使用vim打开config文件进行编辑
# 新建 config 文件
$ touch config
# 用 vim 编辑器打开 config 文件
$ vim config
在 config 文件 中,添加如下内容:
# zc-improving@github
Host zc-impro_github.com
HostName github.com
PreferredAuthentications publickey
IdentityFile ~/.ssh/zc-impro
# 如果生成多个 SSH-Key , 则按上面的格式继续往下写
其中,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 | | | |
接着按esc 退出编辑,shift+zz 保存并退出vim。重新输入测试连接:
$ ssh -T git@zc-imro_github.com
测试结果如下图,配置成功,就可以结束了。
比如说,我有一个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
在提交时,系统会根据邮箱去写明提交者的信息。如果邮箱是假的,则只会显示用户名称,点击名字后,并不会跳转到该用户的github下。
因此,当有多个账户,或者公司电脑交接,需要将以下信息进行修改:
$ git config --global user.name 自己的名字
$ git config -global user.eamil github邮箱
$ git config user.name 自己的名字
$ git config user.eamil github邮箱
其中,global是全局,当某一个仓库没有设置自己的user.name和user.email时,使用的就是全局信息。 当仓库下的config 有设置的user.name和user.email时,则使用当前信息。
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。