SSH原理

如果对对称加密和非对称加密还不太了解,请先了解《通信加密原理》:https://blog.csdn.net/lzghxjt/article/details/98444934

一、SSH原理:

        SSH为Secure Shell的缩写,默认端口22,由IETF的网络小组(Network Working Group)所制定;SSH为建立在应用层基础上的安全协议。SSH是目前较可靠,专为远程登录会话和其他网络服务提供安全性的协议。利用SSH协议可以有效防止远程管理过程中的信息泄露问题。SSH仅仅是一协议标准,其具体的实现有很多,既有开源实现的OpenSSH,也有商业实现方案。使用范围最广泛的当然是开源实现OpenSSH。

        生成公钥和私钥的方法:

ssh-keygen -t rsa -P '' -f ~/.ssh/id_rsa

ssh-keygen是用于产生密钥的工具。其中参数:

  • -t:指定生成密钥的类型(rsa、dsa、ecdsa等);
  • -P:指定passphrase,用于确保私钥的安全;
  • -f:指定存放私钥的文件,公钥文件默认和私钥同目录,只是公钥的文件名是私钥的文件名加后缀.pub;

会在指定目录生成文件id_rsa和id_rsa.pub,其他文件是在使用过程中过生成,可以修改。其中:

  • id_rsa:存放私钥;
  • id_rsa.pub:存放公钥;
  • known_hosts:存放已认证的远程主机的公钥。连接其他服务端时,生成此文件并将其他服务端的公钥追加到此文件中;
  • authorized_keys:存放已授权的客户端公钥,可用于客户端免登录。当其他客户端想登录此服务端时,新建该文件并将这些客户端的公钥追加到此文件中就可以免密登录;
  • config:用于配置要快速访问的服务端的别名等配置信息。可配置多个服务端的相关信息,可使用通配符,如果多次匹配以第一次匹配为准,这样就可以使用ssh 别名 直接登录。详情参考man ssh_config,常用的配置如下:
Host xxx #别名或通配符,匹配的别名将用此配置
    HostName 111.222.33.444 #服务端的ip
    Port 22 #服务端的SSH端口
    User work #要登录服务端的用户名 
    IdentityFile ~/.ssh/id_rsa #要登录服务端的用户的私钥(本地客户端的私钥)
    ControlMaster auto #session共享
    ControlPath ~/.ssh/master-%r@%h:%p #session共享文件的路径
    ControlPersist yes #主连接一直在后台是连接的
    ServerAliveInterval 60 #连接时间间隔

        客户端请求服务端时,客户端会获取服务端的公钥,因为没有像HTTPS那样的CA,所以第一次连接时只能由客户端自己确认公钥是不是正确。

客户端第一次登录服务端时,会提示:无法确认主机xxx.com(xxx.31.18.60)的真实性,不过知道它的公钥指纹(之所以用fingerprint代替公钥,主要是公钥太长(RSA算法生成的公钥有1024位),很难直接比较。所以对公钥进行hash生成一个128位的指纹,这样就方便比较了),是否继续连接?

如果输入yes后,会出现如下提示信息:将该服务器的公钥已添加到know_hosts文件中,然后提示输入密码进行登录。

二、公钥(免密)登录原理 :

        SSH登录时每次都需要输登录密码,很麻烦。SSH提供了另外一种可以免去输入密码过程的登录方式:公钥登录。流程如下:

  • Client将自己的公钥存放在Server上,追加到文件authorized_keys中。
  • Server端接收到Client的连接请求后,会在authorized_keys中匹配到Client的公钥pubKey,并生成随机数R,用Client的公钥对该随机数进行加密得到pubKey(R),然后将加密后信息发送给Client。
  • Client端通过私钥进行解密得到随机数R,然后对随机数R和本次会话的SessionKey利用MD5生成摘要Digest1,发送给Server端。
  • Server端也会对R和SessionKey利用同样摘要算法生成Digest2。
  • Server端会最后比较Digest1和Digest2是否相同,完成认证过程。

 

参考:https://www.jianshu.com/p/33461b619d53

          https://www.cnblogs.com/xjshi/p/9146296.html

  • 0
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值