ssh的原理和配置
- ssh的原理和加密方式
- 为github添加ssh登录
- 为一台电脑配置多个ssh
- Tips
ssh的原理和加密方式
SSH是一种网络协议,用于计算机之间的加密登录。在用ssh和github通讯时,传输速度比http协议快。
ssh的加密方式经过以下几个阶段
- 对称加密
使用对称加密时,客户端和服务器拥有同一个公钥(整个服务器和客户端用的都是同一个)。客户端在本地将登录信息进行加密之后发送到服务器,服务器再通过这个公钥解密判断登录信息是否正确。对称加密的客户端和服务器具有相同的权利和地位,但是每个客户端和服务器握有的权利又太强(因为用的都是同一个公钥,一个客户端相当于拥有了所有的权利,而不是仅仅自己登录的权利) - 非对称加密
如果对称加密的公钥泄露(因为全网只有一个,很容易从某个客户端泄露),则安全就没有保证,所以就有非对称加密。非对称加密的服务器上存有私钥和公钥,当客户端发出请求,服务器将公钥发送给客户端,客户端用这个公钥加密自己的登录信息,再发回服务器,服务器用对应的私钥解密后查看登录信息。这种加密方式将权利都给了服务器,一旦黑客冒充服务器,密码就有泄露的风险。(中间人攻击) - 基于口令和公钥认证
这种认证方法是现在用的最多的。从上面的描述可以看出,非对称加密问题就在于如何对Server的公钥进行认证?可以通过以下步骤来解决。
- 服务器(也就是Server)将自己的公钥通过MD5等加密方法进行加密生成公钥指纹,之所以叫公钥指纹是因为公钥指纹就像公钥的指纹一样有一一对应的关系,而且通过公钥指纹是无法反推出服务器公钥的。
- 服务器在网上公开自己的公钥指纹
- 客户端在登录的时候收到服务器发回的公钥,客户端通过MD5加密得到公钥指纹,然后比较得到的公钥指纹和服务器在网上公布的是否一样,从而确定服务器的真伪。
- 以上步骤(也就是口令认证)只有在第一次连接的时候需要,确认了服务器的真伪之后就可以通过在客户端的私钥和你存放在服务器的公钥进行认证。(通过服务器上的公钥加密,客户端的私钥解密来验证)
为github添加ssh登录
- 创建公钥和私钥
ssh-keygen -t rsa -b 4096 -C "your_email@example.com"
- 启动ssh服务
$ eval "$(ssh-agent -s)"
> Agent pid 59566
- 使能自己刚创建的私钥
$ ssh-add ~/.ssh/id_rsa
- 将公钥上传到github
- 进行第一次口令认证,执行以下代码,然后会问你是否信任服务器继续链接,输入yes完成验证
ssh -T git@github.com
- 以后就可以正常用ssh来登录你的github了
为一台电脑配置多个ssh
在~/.ssh目录下新建一个config文件,下面是参考内容
# 第一个ssh账户
Host home.github.com
HostName github.com
PreferredAuthentications publickey
IdentityFile ~/.ssh/id_rsa_home
# 第二个ssh账户
Host company.github.com
HostName github.com
PreferredAuthentications publickey
IdentityFile ~/.ssh/id_rsa_company
- Host后面填的是你ssh的别称,相当于给他取了个名字
- HostName填的是你服务器的地址
- PreferredAuthentications选项按照上面那样填就行了
- IdentityFile是你密钥的位置
Tips
上面一台电脑配置多个ssh的例子中配置了两个github账户的ssh。当远程仓库为git@home.github.com就会以密钥id_rsa_home与服务器github.com建立连接,当远程仓库为git@company.github.com就会以密钥id_rsa_company与服务器github.com建立连接.